Class IntArray
/* intarray.h
definition of the IntArray class and API
*/
#ifndef _INTARRAY_H // morph of the file name into a legal indentifier
#define _INTARRAY_H
#include <cstdlib>
#include <iostream>
class IntArray
{
public: // note formatting for self-documentation
IntArray ( size_t size = 10 , int ivalue = 0 );
~IntArray ();
IntArray (const IntArray& a);
IntArray& operator = (const IntArray& b);
size_t Size () const;
int& operator [] (size_t i);
const int& operator [] (size_t i) const;
private:
// class variables
size_t size_;
int * data_;
// member function
static int* NewArray (size_t sz);
} ;
std::ostream& operator << (std::ostream& os, const IntArray& a);
#endif
/* intarray.cpp
implementation of IntArray methods and operators
*/
#include <intarray.h>
IntArray::IntArray ( size_t size , int ivalue ) : size_(size), data_(0)
{
data_ = NewArray(size_);
for (size_t i = 0; i < size_; ++i)
data_[i] = ivalue;
}
IntArray::~IntArray ()
{
delete [] data_;
}
IntArray::IntArray (const IntArray& a): size_(a.size_), data_(0)
{
data_ = NewArray(size_);
for (size_t i = 0; i < size_; ++i)
data_[i] = a.data_[i];
}
IntArray& IntArray::operator =(const IntArray& b)
{
if (this != &b)
{
delete [] data_;
data_ = 0;
size_ = b.size_;
data_ = NewArray(size_);
for (size_t i = 0; i < size_; ++i)
data_[i] = b.data_[i];
}
return *this;
}
size_t IntArray::Size() const
{
return size_;
}
int& IntArray::operator [] (size_t i)
{
return *(data_ + i);
}
const int& IntArray::operator [] (size_t i) const
{
return *(data_ + i);
}
std::ostream& operator << (std::ostream& os, const IntArray& a)
{
for (size_t i = 0; i < a.Size() - 1; ++i)
os << a[i] << ' ';
os << a[a.Size() - 1] << '\n';
return os;
}
int* IntArray::NewArray (size_t sz)
{
int * ptr = new(std::nothrow) int [sz];
if (ptr == 0)
{
std::cerr << "** Allocation failure in class IntArray - aborting execution\n";
exit (1); // replace w. custom handler
}
return ptr;
}
/* client.cpp
test client for IntArray
*/
#include <intarray.h>
#include <iostream>
int main()
{
IntArray a;
IntArray b(20);
IntArray c(30, -1);
int num;
size_t count;
std::cout << "Data in IntArray a: " << a
<< "Data in IntArray b: " << b
<< "Data in IntArray c: " << c;
std::cout << "Enter integer data: ";
for (count = 0; std::cin >> num && count < a.Size(); ++count)
{
a[count] = num;
}
std::cout << "Data in IntArray a: " << a;
c = b = a;
std::cout << "Data in IntArray b: " << b;
std::cout << "Data in IntArray c: " << c;
}