在 C++ 中,模板是一种强大的特性,用于编写泛型代码。模板允许函数或类能够处理数据类型参数,从而编写更加通用和可重用的代码。C++ 中主要有两种模板:函数模板和类模板。
### 1. 函数模板
函数模板允许你为不同数据类型编写只需实现一次的函数。从而避免重复代码。定义方式如下:
```cpp
#include <iostream>
// 函数模板定义
template <typename T>
T add(T a, T b) {
return a + b;
}
int main() {
// 使用函数模板
std::cout << add(3, 4) << std::endl; // 输出7,使用int
std::cout << add(3.5, 4.5) << std::endl; // 输出8.0,使用double
return 0;
}
```
在上述例子中,`template <typename T>` 定义了一个类型参数 `T`,这个类型参数可以在函数 `add` 的定义中使用。
### 2. 类模板
类模板允许你为不同数据类型定义一个模板类。类模板使得类可以使用泛型编程,从而避免重复定义多个相同逻辑但处理不同数据类型的类。
```cpp
#include <iostream>
// 类模板定义
template <typename T>
class MyClass {
public:
MyClass(T value) : data(value) {}
void show() {
std::cout << data << std::endl;
}
private:
T data;
};
int main() {
// 使用类模板
MyClass<int> intObj(10);
MyClass<double> doubleObj(10.5);
intObj.show(); // 输出10
doubleObj.show(); // 输出10.5
return 0;
}
```
在这里,`template <typename T>` 定义了一个类型参数 `T`,并且可以在类 `MyClass` 的定义中使用。
### 3. 模板方法
即使模板方法并没有专门的术语,也可以理解为在模板类中定义的函数。这些函数与类中的其他成员方法类似,但具有模板的特性。例如:
```cpp
#include <iostream>
template <typename T>
class MyTemplateClass {
public:
MyTemplateClass(T value) : data(value) {}
void show() {
std::cout << data << std::endl;
}
T getData() const {
return data;
}
void setData(T newValue) {
data = newValue;
}
private:
T data;
};
int main() {
// 使用类模板和模板方法
MyTemplateClass<int> obj(100);
obj.show(); // 输出100
std::cout << obj.getData() <<std::endl; // 输出100
obj.setData(200);
obj.show(); // 输出200
return 0;
}
```
在这个例子中,`show`、`getData` 和 `setData` 都可以认为是模板类 `MyTemplateClass` 中的模板方法。
总结来说,C++ 中的模板提供了编写泛型代码的强大机制,可以用于定义函数模板和类模板,从而实现代码的重用和灵活性。模板方法可以视为在模板类中定义的成员函数,它们同样使用模板参数。