一.概述:
当类模板碰到继承时,需要注意以下几点:
- 当子类继承的父类是一个类模板时,子类在声名的时候要指定出父类中T的类型
- 如果不指定编译器,无法给子类分配内存
- 如果想灵活指定出父类中t的类型,子类也是变为类模板
示例一:
template<class T>
class Base
{
public:
T base;
};
//class Son:public Base //不对, C++编译需要给子类分配内存,必须知道父类中T的类型才可以向下继承
class Son:public Base<int> //必须指定一个类型
{
};
示例二:
#include<iostream>
#include<string>
using namespace std;
template<class T>
class Base
{
public:
T base;
};
//如果想灵活指定父类中T的类型,子类也需要变类模板
template <class T1,class T2>
class Son:public Base<T2>
{
public:
T1 obj;
};
void test()
{
Son<int,char> s;
cout << "obj的类型为: "<< typeid(s.obj).name() << endl;
cout << "base的类型为: "<< typeid(s.base).name() << endl;
}
int main()
{
test();
return 0;
}
运行结果:
obj的类型为: int
base的类型为: char