C++之模板类template
2024-01-08 17:32:44
在C++中,模板类是一种允许你编写通用类以处理各种数据类型的机制。通过使用模板类,你可以编写一次代码,然后使用不同的数据类型进行实例化,而无需为每种数据类型都编写一个新类。这有助于实现代码的重用和泛化。
一个实例:
#include <iostream>
// 定义一个模板类
template <typename T>
class MyTemplateClass {
private:
T data;
public:
// 构造函数
MyTemplateClass(T value) : data(value) {}
// 成员函数
void display() {
std::cout << "Data: " << data << std::endl;
}
};
int main() {
// 使用模板类实例化不同类型的对象
MyTemplateClass<int> intObj(42);
MyTemplateClass<double> doubleObj(3.14);
MyTemplateClass<std::string> stringObj("Hello, Templates!");
// 调用成员函数
intObj.display();
doubleObj.display();
stringObj.display();
return 0;
}
另一个实例:
#include <iostream>
#include <string>
// 定义一个模板类 YourClass,有一个纯虚函数 merge 接受可变数量的模板参数 T
template<typename... T>
class YourClass {
public:
virtual void merge(T... args) = 0;
};
// 定义一个模板类 ConcreteClass,继承自 YourClass,使用相同的模板参数 T
template<typename... T>
class ConcreteClass : public YourClass<T...> {
public:
// 实现 YourClass 中的虚函数 merge
void merge(T... args) override {
std::cout << "Merging values: ";
// 调用私有成员函数 printValues 处理参数包中的每个值
printValues(args...);
std::cout << std::endl;
}
private:
// 递归地打印参数包中的每个值
template<typename U, typename... Rest>
void printValues(U first, Rest... rest) {
std::cout << first << " ";
// 递归调用 printValues 处理剩余的参数
printValues(rest...);
}
// 基本情况:参数包为空时终止递归
void printValues() {
// 递归的终止条件,什么都不做
}
};
int main() {
// 创建一个 ConcreteClass 的实例,模板参数为 int, double, std::string
ConcreteClass<int, double, std::string> instance;
// 调用 ConcreteClass 实例的 merge 函数,传递整数、浮点数和字符串作为参数
instance.merge(42, 3.14, "Hello");
return 0;
}
文章来源:https://blog.csdn.net/qq_42244167/article/details/135461544
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!