在C++中,类模板(Class Template)是模板编程的另一种形式,它允许我们定义一个类,这个类可以操作多种数据类型而无需为每种数据类型编写专门的类定义。类模板提供了一种编写泛型代码的方法,使得代码更加灵活和可重用。
类模板的定义
类模板的定义以template关键字开始,后面跟着一个尖括号(<和>)内的模板参数列表。模板参数列表可以包含一个或多个模板参数,每个参数可以是类型参数(如typename T或class T)或非类型参数(如整数常量)。
template <typename T>
class MyClass {
public:
// 构造函数
MyClass(T value) : data(value) {}
// 成员函数
T getValue() const {
return data;
}
void setValue(T value) {
data = value;
}
private:
T data; // 模板类型参数T用于定义成员变量的类型
};
在这个例子中,MyClass是一个类模板,它有一个模板参数T。这个类模板定义了一个构造函数、一个获取成员变量值的成员函数getValue和一个设置成员变量值的成员函数setValue。成员变量data的类型是模板参数T。
类模板的使用
要使用类模板,我们需要在创建对象时指定模板参数的实际类型。这个过程称为模板实例化(Template Instantiation)。
int main() {
// 实例化MyClass模板,T被替换为int类型
MyClass<int> intObject(42);
std::cout << "intObject value: " << intObject.getValue() << std::endl; // 输出42
// 实例化MyClass模板,T被替换为double类型
MyClass<double> doubleObject(3.14);
std::cout << "doubleObject value: " << doubleObject.getValue() << std::endl; // 输出3.14
return 0;
}
在这个例子中,我们分别实例化了MyClass模板的int和double版本,并分别创建了intObject和doubleObject对象。每个对象都有自己的类型(MyClass<int>和MyClass<double>),并且它们的行为与普通的类对象相同,但它们的成员变量data的类型分别是int和double。
通过类模板,C++程序员可以编写更加通用和可重用的代码,从而提高开发效率和代码质量。类模板是C++模板编程的核心组成部分,它使得C++成为一种非常强大和灵活的编程语言。