1)模板类继承普通类(常见)。
2)普通类继承模板类的实例化版本。
3)普通类继承模板类。(常见)
4)模板类继承模板类。
5)模板类继承模板参数给出的基类(不能是模板类)。
示例:
1)模板类继承普通类
#include <iostream>
#include <string>
// 普通的基类
class Base {
public:
void show() {
std::cout << "Base class show function called." << std::endl;
}
};
// 模板类继承自普通类 Base
template <typename T>
class Derived : public Base {
private:
T data; // 模板类型的数据
public:
// 构造函数
Derived(T d) : data(d) {}
// 显示模板类型数据
void display() {
std::cout << "Data: " << data << std::endl;
show(); // 调用基类的函数
}
};
int main() {
Derived<int> obj1(123);
obj1.display(); // 显示 int 类型的数据
Derived<std::string> obj2("Hello");
obj2.display(); // 显示 string 类型的数据
return 0;
}
代码解释:
- Base 类:这是一个普通的基类,其中包含一个
show
方法,用于输出一些基本信息。 - Derived 类:这是一个模板类,继承自
Base
类。它包含一个模板类型的成员data
。Derived
类的构造函数接受一个类型为T
的参数,并将其存储在data
成员变量中。 - Derived<T>::display() 方法:这个方法显示存储在
data
中的数据,并调用继承自Base
类的show
方法。
这个示例展示了如何通过继承普通类来复用和扩展已有的功能。模板类通过继承可以适应更多类型的数据,同时保留基类的行为,这是模板编程中一个非常强大的特性。