
#include "iostream.h"

const int ArraySize = 6;
const int SZ = 10;

class IntArray {
friend ostream& operator<<(ostream & os, IntArray & ia);
friend IntArray operator+(const IntArray &, int *);
public:
   IntArray (int sz = ArraySize);
   IntArray (const IntArray &);
   ~IntArray() {delete ia;};
   IntArray & operator=(const IntArray &);
   int & operator[](int);
   int getSize() {return size;};
   IntArray operator+(IntArray &);
private:
   int size; int *ia;};

ostream& operator<<(ostream & os, IntArray & ia)
{  os <<"\n"<< ia.size <<"\n";
   for (int i=0; i< ia.size; ++i)
	  os << ia.ia[i]<<" ";
   os << "\n";
   return os;
}

IntArray IntArray::operator+(IntArray & ip)
{  IntArray ia_tmp(size+ip.size);
   for (int i=0; i< size; ++i)
	  ia_tmp.ia[i] = ia[i];
   for (int i=size; i<ia_tmp.size;i++)
	  ia_tmp.ia[i] = ip.ia[i-size];
   return (ia_tmp);
}

IntArray operator+(const IntArray & ip, int a[])  // error if not const
{  IntArray ia_tmp(10);
   for (int i=0; i<ip.size;i++)
	  ia_tmp.ia[i] = ip.ia[i]+a[i];
   return (ia_tmp);
}

IntArray::IntArray (int sz)
{  size = sz;
   ia = new int [size];
   for (int i=0; i< sz; ++i)
	  ia[i]=0; }

IntArray::IntArray(const IntArray &iA)
{  size = iA.size;
   ia = new int [size];
   for (int i=0;i<size;++i)
	  ia[i]=iA.ia[i]; }

IntArray & IntArray::operator=(const IntArray &iA)
{  delete ia;
   size = iA.size;
   ia = new int [size];
   for (int i=0;i< size;++i)
	  ia[i]=iA.ia[i];
   return *this; }

int & IntArray::operator[](int index)
{  return ia[index];}

main()
{
   int mySize=20;
   int ia[SZ];
   IntArray myArray(mySize), iA(SZ);
   IntArray *pA=&myArray;
   IntArray iA2;

   iA[0] = 6;
   iA[1] = 6;
   iA[2] = 6;
   iA[3] = 9;
   iA[4] = 9;
   iA[5] = 9;

   iA2[2] = iA[3];
   cout<<iA2[2]<<"\n";

   iA2[0] = 99;
   iA2[1] = 99;

   IntArray iA3=iA2;

   cout<<iA3.getSize()<<"\n";
   cout<<iA3[2]; 

   cout<<iA2<<iA3;
   
   IntArray iA4;

   cout<<iA4;
   iA4 = iA3;
   cout<<iA4;

   IntArray iA5, iA6(10);
   iA5 = iA4+iA3;
   cout<<iA5;

   int aa[10]={1,2,3,4,5,6,7,8,9,10};
   iA5 = iA5 + aa;
   iA6 = iA6 + aa + aa;

   cout<<iA5<<iA6;

   iA6 = iA6+iA6+iA6;
   cout<<iA6;
}

   
