第二十三模板 7复杂类模板 简单

// 第二十三模板 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;
}*/

  

原文地址:https://www.cnblogs.com/xiangxiaodong/p/2711682.html