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


    前言


    什么是模版?

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

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

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

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


    函数模版的定义

    函数模版

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

    其中,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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

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

    Max int: 10
    Max float: 3.14
    
    • 1
    • 2

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

    类模版的定义

    类模版

    template <typename T>
    class 类名 {
        // 类成员和函数定义
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    类模板的定义使用与函数模板类似的语法,使用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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

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

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

    上述示例输出结果:

    Value: 5
    Value: 3.14
    Value: Hello, World!
    
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    数据结构:Map和Set(2):相关OJ题目
    Spire.PDF for NET 8.7.2
    容器类型及操作
    #Docker 提示空间不足的解决方法#
    数据结构(五):哈希表及面试常考的算法
    Java_汉诺塔
    QuantLib学习笔记——看看几何布朗运动有没有股票走势的感觉
    2000万的行数在2023年仍然是 MySQL 表的有效软限制吗?
    flex 收缩计算、简写
    JS 之 事件Event对象详解(属性、方法、自定义事件)
  • 原文地址:https://blog.csdn.net/Sciurdae/article/details/134322214