模板类的继承包括四种:
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 };
类模板继承类模板:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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 };
4. 模板类继承模板参数给出的基类
——继承哪个基类由模板参数决定
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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 }
第四个比较奇怪点,,,深思ing。。。