模板类的构造函数 =操作符重载

模板类的构造函数 =操作符重载
 1  template < class  T >
 2  class  ye
 3  {
 4  public :
 5      ye(){cout << " I'm ye() " << endl;}
 6 
 7       // -------------------------------
       //普通拷贝构造函数
 8      ye( const  ye < T >& y){cout << " I'm ye(const ye<T>&) " << endl;}
       //模板拷贝构造函数
 9      template < class  K >
10      ye( const  ye < K >   & ){cout << " I'm template<class K>ye(const ye<K>&) " << endl;}
11       // -------------------------------
12 
13       // -------------------------------
14      ye(T * )
15      {
16          cout << " I'm ye(T*) " << endl;
17      }
18      template < class  Y >
19      ye(Y * ){cout << " I'm template<class Y> ye(Y*) " << endl;}
20       // -------------------------------
21 
22       // -------------------------------
23      ye& operator=(const ye<T> &)
24      {
25          cout<<"I'm operator=(const ye<T>&)"<<endl;
26          return *this;
27      }
28      template<class N>
29      ye& operator=(const ye<N> &)
30      {
31          cout<<"I'm template<class N> operator=(const ye<N>&)"<<endl;
32          return *this;
33      }
34       // -------------------------------
35 
36  };

上面是一个典型的模板类 首先看构造函数
当我们输入
ye<int> y;                 //输出 I'm ye()
ye<int> k=y;或ye<int> k(y);//输出
I'm ye(const ye<T>&)
ye<float> f=k;             //输出
I'm template<class K>ye(const ye<K>&)
到此 没什么问题

现在注释掉两个拷贝构造函数
输入
ye<int> y;   //输出
I'm ye()
ye<int> k=y; //无输出,使用默认的构造函数

清空 输入
ye<int> y;    
ye<float> k=y; //会出现编译错误

清空 输入
ye<int> y;
ye<int> k;
y=k;         // I'm operator=(const ye<T>&)
ye<float> h;
h=k;         // I'm template<class N> operator=(const ye<N>&)

如果把操作符重载函数注释掉
当出现y=k时 就会调用相应默认的赋值函数
当出现h=k时 就会出现编译错误


你可能感兴趣的:(模板类的构造函数 =操作符重载)