模板类与继承
- 模板类继承普通类
- 普通类继承模板类的实例化版本。
- 普通类继承模板类
- 模板类继承模板类
- 模板类继承模板参数给出的基类
模板类继承普通类
基类
派生类
测试函数;
普通类继承模板类的实例化版本。
模板基类
普通类继承模板基类的实例化版本:
普通类继承模板类
让普通类变成模板类才能继承。
模板基类;
普通类变成了模板类,派生类如下:
测试如下:
模板类继承模板类
普通类变成了模板类,才能继承模板类。
模板基类 :
模板派生类:
测试函数:
模板类继承模板参数给出的基类
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。
class AA {
public:
AA() { cout << "调用了AA的构造函数AA()。\n"; }
AA(int a) { cout << "调用了AA的构造函数AA(int a)。\n"; }
};
class BB {
public:
BB() { cout << "调用了BB的构造函数BB()。\n"; }
BB(int a) { cout << "调用了BB的构造函数BB(int a)。\n"; }
};
class CC {
public:
CC() { cout << "调用了CC的构造函数CC()。\n"; }
CC(int a) { cout << "调用了CC的构造函数CC(int a)。\n"; }
};
template<class T>
class DD {
public:
DD() { cout << "调用了DD的构造函数DD()。\n"; }
DD(int a) { cout << "调用了DD的构造函数DD(int a)。\n"; }
};
template<class T>
class EE : public T { // 模板类继承模板参数给出的基类。
public:
EE() :T() { cout << "调用了EE的构造函数EE()。\n"; }
EE(int a) :T(a) { cout << "调用了EE的构造函数EE(int a)。\n"; }
};
int main()
{
EE<AA> ea1; // AA作为基类。
EE<BB> eb1; // BB作为基类。
EE<CC> ec1; // CC作为基类。
EE<DD<int>> ed1; // EE<int>作为基类。
// EE<DD> ed1; // DD作为基类,错误。
}