class IntArray { public: // operations performed on arrays IntArray( int s = 24 ); // default value IntArray( const IntArray& ); ~IntArray(){ delete data; } IntArray& operator=( const IntArray& ); int& operator[]( int ); IntArray operator+( const IntArray& ) const; int getSize() const { return size; } private: // internal data representation int size; int* data; // points to heap-allocated storage }; IntArray::IntArray( int s ) { size = s; data = new int[ size ]; for ( int i = 0; i < s; ++i ) data[ i ] = 0; } IntArray::IntArray( const IntArray &b ) { size = b.size; data = new int[ size ]; for ( int i = 0; i < size; ++i ) data[ i ] = b.data[ i ]; } IntArray& IntArray::operator=( const IntArray &b ) { if( data != b.data ) { delete data; size = b.size; data = new int[ size ]; for( int i = 0; i < size; ++i ) data[ i ] = b.data[ i ]; } return *this; } int& IntArray::operator[]( int index ) { return data[ index ]; } IntArray IntArray::operator+( const IntArray& b ) const { IntArray r( size > b.size ? *this : b ); if( size > b.size ) { for( int i = 0; i < b.size; i++ ) r.data[i] += b.data[i]; } else { for( int i = 0; i < size; i++ ) r.data[i] += data[i]; } return r; }