模板类的继承

模板类的继承包括四种:

1.(普通类继承模板类)

2.(模板类继承了普通类(非常常见))

3.(类模板继承类模板)

4.(模板类继承类模板,即继承模板参数给出的基类)

其中,普通类继承模板类比较简单,如

1 template<class T>
2 class TBase{
3     T data;
4 ……
5 };
6 class Derived:public TBase<int>{
7 ……
8 };

模板类继承普通类:

1 class TBase{
2 ……
3 };
4 template<class T>
5 class TDerived:public TBase{
6 T data;
7 ……
8 };

类模板继承类模板:

 1 template<class T>
 2 class TBase{
 3 T data1;
 4 ……
 5 };
 6 template<class T1,class T2>
 7 class TDerived:public TBase<T1>{
 8 T2 data2;
 9 ……
10 };
View Code

4. 模板类继承模板参数给出的基类

    ——继承哪个基类由模板参数决定

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class BaseA{
 5 public:
 6     BaseA(){cout<<"BaseA founed"<<endl;}
 7 };
 8 class BaseB{
 9 public:
10     BaseB(){cout<<"BaseB founed"<<endl;}
11 };
12 template<typename T, int rows>
13 class BaseC{
14 private:
15     T data;
16 public:
17     BaseC():data(rows){
18         cout<<"BaseC founed "<< data << endl;}
19 };
20 template<class T>
21 class Derived:public T{
22 public:
23     Derived():T(){cout<<"Derived founed"<<endl;}
24 };
25 
26 void main()
27 {
28     Derived<BaseA> x;// BaseA作为基类
29     Derived<BaseB> y;// BaseB作为基类
30     Derived<BaseC<int, 3> > z; // BaseC<int,3>作为基类
31 }
View Code

第四个比较奇怪点,,,深思ing。。。

原文地址:https://www.cnblogs.com/xiezhw3/p/3084352.html