類别範本與繼承

Ricky001發表於2024-12-07

當模板碰到繼承時,需要注意以下幾點:
當子類繼承的父類是一個類别範本時,子類在宣告的時候,要指定出父類中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的型別

相關文章