當模板碰到繼承時,需要注意以下幾點:
當子類繼承的父類是一個類别範本時,子類在宣告的時候,要指定出父類中T的型別
如果不指定,編譯器無法給子類分配記憶體
如果想靈活指定出父類中T的型別,子類也需變為模板
示例:
#include <iostream>
using namespace std;
#include <string>
//類别範本與繼承
template<class T>
class Base
{
T m;
};
//class Son:public Base//error,必須要知道父類中的T型別,才能繼承子類
class Son:public Base<int>
{
};
void test01()
{
Son s1;
}
//如果想靈活指定父類中T型別,子類也需要變類别範本
template<class T1,class T2>
class Son2:public Base<T2>
{
public:
Son2()
{
cout<<"T1的資料型別為:"<<typeid(T1).name()<<endl;
cout<<"T2的資料型別為:"<<typeid(T2).name()<<endl;
}
T1 obj;
};
void test02()
{
Son2<int,char>S2;
}
int main()
{
//test01();
test02();
return 0;
}
總結:
如果父類是類别範本,子類需要指定出父類中T的型別