当类模板遇上继承时,需要注意以下几点:
1.当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型。
2.如果不指定父类中T的类型,编译器无法给子类分配内存。
3.如果想灵活地指出父类中T的类型,子类也需变为类模板。
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
// 父类是类模板
template<typename T>
class Base
{
public:
T obj;
};
// 父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型
class Son : public Base<int>
{
};
int main(void)
{
system("pause");
return 0;
}
子类Son继承的父类Base是一个类模板,子类Son在声明的时候,要指定出父类Base中T的数据类型。
这样也会导致父类中T的数据类型被固定下来,实现不了:类型参数化
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
// 父类是类模板
template<typename T>
class Base
{
public:
T obj;
};
// 想要灵活地指定父类中的数据类型,子类也需要变成类模板
template<typename T1, typename T2>
class Son : public Base<T2>
{
};
int main(void)
{
Son<int, string> son;
system("pause");
return 0;
}