欢迎光临
我们一直在努力

c++进阶:类模版和函数模版

文章目录

    • 概述
    • 类模版
        • 1.概述
        • 2.语法
    • 函数模版
      • 1.概述
      • 2.语法
    • 综合示例

概述

在C++中,模板(Template)是一种通用的编程工具,允许程序员编写泛型代码,使得类或函数能够适用于多种不同的数据类型而不需要重复编写相似的代码,C++提供了两种主要类型的模板:类模板和函数模板。

类模版

1.概述

类模板允许定义通用的类,其中的成员变量或成员方法的类型由模板参数指定。这样的类可以处理不同类型的数据,而不需要为每个数据类型编写单独的类。

2.语法

template <typename T>
class Box {
private:
T content;
public:
Box(T val) : content(val) {}
T get() const { return content; }
void set(T val) { content = val; }
};

实例化时需要显式指定类型

Box<int> intBox(123);

成员函数定义在类外时,需要再次声明模板参数

template <typename T>
void Box<T>::set(T val) { content = val; }

函数模版

1.概述

定义一个通用的函数,其中某些参数类型或返回值类型暂不确定,由调用时实际传入的参数类型决定

2.语法

template <typename T>
T add(T a, T b) {
return a + b;
}

接调用,编译器根据实参自动推导类型

int result = add(3, 5); // T 推导为 int
double res = add(2.5, 3.7); // T 推导为 double

指定类型

int val = add<int>(3, 5.2); // 强制使用 int,5.2 会转换为 int

综合示例

#include <iostream>
#include <string>

// 函数模板
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}

// 类模板
template <typename T>
class Wrapper {
T value;
public:
Wrapper(T v) : value(v) {};
void print();
};
template <typename T>
void Wrapper<T>::print()
{
std::cout << "Value: " << value << std::endl;
}

int main() {
// 函数模板自动推导
std::cout << max(3, 8) << std::endl; // 8 (int)
std::cout << max(3.14, 2.71) << std::endl; // 3.14 (double)

// 类模板
Wrapper<int> w1(42);
w1.print(); // Value: 42

Wrapper<std::string> w2("Hello");
w2.print(); // Value: Hello
}

运行效果 在这里插入图片描述

赞(0)
未经允许不得转载:171主机测评 » c++进阶:类模版和函数模版
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址