#include <iostream>
using namespace std;
const int DefaultSize=10;
class Animal
{
public:
Animal(int);
Animal();
~Animal(){}
int GetWeight() const{return itsWeight;}
void Display(){std::cout < <itsWeight;}
friend ostream& operator < <(ostream&, const Animal&);
private:
int itsWeight;
};
Animal::Animal(int weight):itsWeight(weight){}
Animal::Animal():itsWeight(0){}
ostream& operator < <(ostream& theStream, const Animal& theAnimal)
{
theStream < <theAnimal.GetWeight() < <endl;
return theStream;
}
template <class T>
class Array
{
public:
Array(int itsSize=DefaultSize);
Array(const Array &rhs);
~Array(){delete [] pType;}
Array& operator=(const Array&);
T& operator[](int offset){return pType[offset];}
const T& operator[](int offset) const{return pType[offset];}
int GetSize() const{return itsSize;}
friend ostream& operator < < (ostream&, Array <T> &);
private:
T *pType;
int itsSize;
};
template <class T>
Array <T> ::Array(int size):itsSize(size)
{
pType= new T[size];
for(int i=0;i <size;i++)
pType[i]=0;
}
template <class T>
Array <T> ::Array(const Array &rhs)
{
itsSize=rhs.GetSize();
pType = new T[itsSize];
for(int i=0;i <itsSize;i++)
pType[i]=rhs[i];
}
template <class T>
Array <T> & Array <T> ::operator =(const Array &rhs)
{
if(this==&rhs)
return *this;
delete []pType;
itsSize=rhs.GetSize();
pType= new T(itsSize);
for(int i=0;i <itsSize;i++)
pType[i]=rhs[i];
return *this;
}
template <class T>
ostream& operator < <(ostream& output, Array <T> &theArray)
{
for(int i=0;i <theArray.GetSize();i++)
output < < "[ " < <i < < "]=\t " < <theArray[i] < <endl;
return output;
}
int main()
{
Array <int> theArray;
Animal myAnimal(10);
cout < <myAnimal < <endl;
for(int i=0;i <theArray.GetSize();i++)
{
theArray[i]=i*2;
// cout < <theArray[i] < <endl; //这个就好用
}
cout < <theArray < <endl; //始终编译不过去,不知为什么????
return 0;
}
请高手帮我看看,哪错了
------解决方案--------------------------------------------------------
将友元
template <class T>