template<class Type>
array<Type>::array(const array<Type>&x)//拷贝构造
{
int n = x.arraySize ;
//int arraySize = n; //这里想干嘛,无意中屏蔽了类成员 arraySize
arraySize=n;
elements = new Type[n];
if(elements==0)
{
cerr<<"Memory Allocation Error"<<endl ;
arraySize=0 ;
return ;
}
Type * srcptr = x.elements ;
Type * destptr = elements ;
while(n--)
*destptr++=*srcptr++;
}
template<class Type>
Type &array<Type>::operator [ ] (int i)
{
if (i<0 || i>arraySize-1)
{
cerr<<"Index out of Range"<<endl;
exit(1);
}
return elements [ i ] ;
}
template<class Type>
void array < Type>::reSize(int sz)
{
if ( sz<=0 )
cerr<<"Invalid array Size"<<endl;
if ( sz != arraySize)
{
Type * newarray = new Type[ sz] ;
if(newarray == 0)
{
cerr <<"Memory Allocation Error" <<endl;
return;
}
int n = (sz <= arraySize )?sz:arraySize;
Type * srcptr = elements ;
Type * destptr = newarray ;
while (n--)
*destptr++ = *srcptr++;
delete [ ] elements ;
elements = newarray ;
arraySize = sz;
}
}//reSize()
int n = x.arraySize ;
int arraySize = n;
elements = new Typen];
if(elements==0)
{ cerr<<"Memory Allocation Error"<<endl ; arraySize=0 ; return ; }
Type * srcptr = x.elements ;
Type * destptr = elements ;
while(n--) * destptr++=*srcptr++;
}