| | | | | next -> |

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;
}


| next -> | Top of Page | 6. C++ Classes Part 2: Advanced Features - 22 of 22