模板類的繼承


模板類的繼承包括四種:

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。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM