C++学习--泛型编程---模版

文章目录

  • 前言
  • 什么是模版?
  • 函数模版的定义
  • 类模版的定义

前言


什么是模版?

C++中的模版是一种通用编程工具,它允许我们编写通用的函数或者类(函数模版and类模版),可以根据不同的数据类型进行参数化。

模板是根据参数类型生成代码的蓝图或模具。通过使用尖括号<>关键字template,我们可以定义函数模板和类模板。

函数模板允许我们在不同的数据类型之间重用相同的函数代码,只需改变参数类型。类模板允许我们定义通用的类,其中一些成员变量和函数的类型可以是模板参数。

模版的作用:可以提高代码的可重用性和灵活性,减少重复编写类似代码的工作,同时也可以提高程序的效率。


函数模版的定义

函数模版

template <typename T>
返回类型 函数名(参数列表) {
    // 函数体
}

其中,typename 或 class 是用于声明模板参数的关键字,T 是模板参数名称,可以根据需要选择其他名称。函数模板的参数列表可以包含任意数量和类型的参数。

一个简单的例子(函数模版):

#include 

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

int main() {
    int x = 5, y = 10;
    float f1 = 3.14, f2 = 2.71;

    // 调用函数模板
    int max_int = maximum(x, y);
    float max_float = maximum(f1, f2);

    std::cout << "Max int: " << max_int << std::endl;
    std::cout << "Max float: " << max_float << std::endl;

    return 0;
}

在上述代码中,我们定义了一个函数模板 maximum,它接受两个类型相同的参数,并返回它们中的较大值。在 main 函数中,我们分别传入整型和浮点型参数调用了 maximum 函数模板,并将返回的较大值打印输出。

运行上述代码,将会输出以下结果:

Max int: 10
Max float: 3.14

可以看到,函数模板 maximum 根据传入的参数类型进行了实例化,并正确返回了较大值。

类模版的定义

类模版

template <typename T>
class 类名 {
    // 类成员和函数定义
};

类模板的定义使用与函数模板类似的语法,使用typename或class关键字声明模板参数,并在类内部定义成员变量和成员函数。类模板可以包含任意数量和类型的成员。

示例:

#include 

// 定义一个类模板
template <typename T>
class MyTemplateClass {
public:
    MyTemplateClass(T value) : data(value) {}

    void display() {
        std::cout << "Value: " << data << std::endl;
    }

private:
    T data;
};

int main() {
    // 使用类模板创建对象
    MyTemplateClass<int> intObj(5);
    intObj.display();

    MyTemplateClass<double> doubleObj(3.14);
    doubleObj.display();

    MyTemplateClass<std::string> stringObj("Hello, World!");
    stringObj.display();

    return 0;
}

在上面的代码中,我们定义了一个类模板 MyTemplateClass,它接受一个类型参数 T。类模板中包含一个数据成员 data 和一个成员函数 display,用于显示存储的值。在 main 函数中,我们使用不同的类型参数创建了几个对象,并调用了 display 函数来显示存储的值。

在示例中,我们分别使用了 int、double 和 std::string 作为类型参数创建了对象。

上述示例输出结果:

Value: 5
Value: 3.14
Value: Hello, World!

你可能感兴趣的:(C++学习,c++,学习)