类模板与继承(7)
当类模板碰到继承时,需要注意以下几点:
1.当子类继承的父类是是一个类模板时,子类在声明的时候,要指定出父类中T的数据类型
2.如果不指定,编译器无法给子类分配内存
3.如果想要灵活的指出父类中T的类型,子类也需变为类模板
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 //类模板与继承 6 template<class T> 7 class Base 8 { 9 public: 10 11 T m; 12 }; 13 14 //class Son :public Base//错误,必须知道父类中T的数据类型,才能继承给子类 15 class Son1 :public Base<int> 16 { 17 18 }; 19 20 void test_01(void) 21 { 22 Son1 s1; 23 } 24 25 //如果想灵活的指定父类中的T的类型,子类也需要变为类模板 26 template<class T1,class T2> 27 class Son2 :public Base<T1> 28 { 29 public: 30 31 Son2() 32 { 33 cout << "T1的类型:" << typeid(T1).name() << endl; 34 cout << "T2的类型:" << typeid(T2).name() << endl; 35 } 36 37 T2 obj; 38 }; 39 40 void test_02(void) 41 { 42 Son2<int, char>s2;//创建对象时,自动调用类的构造函数 43 } 44 45 int main(void) 46 { 47 test_01(); 48 test_02(); 49 50 system("pause"); 51 return 0; 52 }
如果父类是类模板,子类需要指出父类中T的数据类型