// 第二十三模板 7复杂类模板 /*#include <iostream> using namespace std; const int size=10; class people { public: people(int i):x(i){}; people():x(0){} int GetAge()const{ return x;} void show()const{cout<<x<<endl;} private: int x; }; template <class T> class num { public: num(int Tsize=size); //带一个整型的构造函数 num(const num&r); //应该是个复制构造函数 ~num(){delete []pt;} //析构函数 num&operator=(const num&); //重载=运算符 T&operator[](int offset){ return pt[offset]; } const T&operator[](int offset)const { return pt[offset]; } int GetSize()const{return numsize; } private: int numsize; T *pt; }; template<class T> num<T>::num(int size):numsize(size) { pt = new T[size]; for(int i=0; i<size; i++){ pt[i] = 0; } } template <class T> num<T>::num(const num&r) { numsize = r.GetSize(); pt = new T[numsize]; for(int i=0; i<numsize; i++){ pt[i] = r[i]; } } template<class T> num<T>&num<T>::operator=(const num&r) { if(this == &r){ return *this; delete []pt; numsize = r.GetSize(); pt = new T[numsize]; for(int i=0; i<numsize; i++){ pt[i] = r[i]; } } return *this; } int main() { num<int>one; num<people>two; people *p; for(int i=0; i<one.GetSize(); i++) { one[i] = i*2; p = new people(i*3); two[i] = *p; delete p; } for(int j=0; j<one.GetSize(); j++){ cout<<"one["<<j<<"]:"<<"\t"<<one[j]<<"\t\t"; cout<<"two["<<j<<"]:"<<"\t"; two[j].show(); cout<<endl; } //num类中定义的复制构造函数和operator=()函数都没有被使用 //当我们在创建一个num灰对像并用一个已经存在的num类对像对其进行初始化时会调用复制构造函数 num<people>three = two; for(int jj=0; jj<three.GetSize(); jj++){ cout<<"three["<<jj<<"]:"<<"\t"; three[jj].show(); cout<<endl; } //最后要注意模板成员函数的定义方法 //声明中写内嵌函数 //T&operator[](int offset){ return pt[offset]; } //在类的外部写成员函数,必须这么写 //T& num<T>::operator[](int offset) //{ // retrun pt[offset]; //} //T为返回类型,num<T>o为模板类名称,之后面加作用域解析符::,表示后面的operator[]()函数是属于该模板类的 return 0; }*/