00001
00002 #include <iostream.h>
00003 #include <iomanip.h>
00004 #include <stdlib.h>
00005 #include <assert.h>
00006 #include "array1.h"
00007
00008
00009 int Array::arrayCount = 0;
00010
00011
00012 Array::Array( int arraySize )
00013 {
00014 size = ( arraySize > 0 ? arraySize : 10 );
00015 ptr = new int[ size ];
00016 assert( ptr != 0 );
00017 ++arrayCount;
00018
00019 for ( int i = 0; i < size; i++ )
00020 ptr[ i ] = 0;
00021 }
00022
00023
00024
00025 Array::Array( const Array &init ) : size( init.size )
00026 {
00027 ptr = new int[ size ];
00028 assert( ptr != 0 );
00029 ++arrayCount;
00030
00031 for ( int i = 0; i < size; i++ )
00032 ptr[ i ] = init.ptr[ i ];
00033 }
00034
00035
00036 Array::~Array()
00037 {
00038 delete [] ptr;
00039 --arrayCount;
00040 }
00041
00042
00043 int Array::getSize() const { return size; }
00044
00045
00046
00047 const Array &Array::operator=( const Array &right )
00048 {
00049 if ( &right != this ) {
00050
00051
00052
00053 if ( size != right.size ) {
00054 delete [] ptr;
00055 size = right.size;
00056 ptr = new int[ size ];
00057 assert( ptr != 0 );
00058 }
00059
00060 for ( int i = 0; i < size; i++ )
00061 ptr[ i ] = right.ptr[ i ];
00062 }
00063
00064 return *this;
00065 }
00066
00067
00068
00069 bool Array::operator==( const Array &right ) const
00070 {
00071 if ( size != right.size )
00072 return false;
00073
00074 for ( int i = 0; i < size; i++ )
00075 if ( ptr[ i ] != right.ptr[ i ] )
00076 return false;
00077
00078 return true;
00079 }
00080
00081
00082
00083 int &Array::operator[]( int subscript )
00084 {
00085
00086 assert( 0 <= subscript && subscript < size );
00087
00088 return ptr[ subscript ];
00089 }
00090
00091
00092
00093 const int &Array::operator[]( int subscript ) const
00094 {
00095
00096 assert( 0 <= subscript && subscript < size );
00097
00098 return ptr[ subscript ];
00099 }
00100
00101
00102
00103 int Array::getArrayCount() { return arrayCount; }
00104
00105
00106
00107 istream &operator>>( istream &input, Array &a )
00108 {
00109 for ( int i = 0; i < a.size; i++ )
00110 input >> a.ptr[ i ];
00111
00112 return input;
00113 }
00114
00115
00116 ostream &operator<<( ostream &output, const Array &a )
00117 {
00118 int i;
00119
00120 for ( i = 0; i < a.size; i++ ) {
00121 output << setw( 12 ) << a.ptr[ i ];
00122
00123 if ( ( i + 1 ) % 4 == 0 )
00124 output << endl;
00125 }
00126
00127 if ( i % 4 != 0 )
00128 output << endl;
00129
00130 return output;
00131 }