类模板与继承(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的数据类型

posted @ 2020-04-27 10:55  坦率  阅读(400)  评论(0编辑  收藏  举报