zoukankan      html  css  js  c++  java
  • 函数模板

    函数模板

    • 思考:如果重载的函数,其解决问题的逻辑是一致的、函数体语句相同,只是处理的数据类型不同,那么写多个相同的函数体,是重复劳动,而且还可能因为代码的冗余造成不一致性。
    • 解决:使用模板

    例:求绝对值函数的模板

    函数模板定义语法

    • 语法形式:

      template <模板参数表>

    函数定义

    • 模板参数表的内容
      • 类型参数:class(或typename) 标识符
      • 常量参数:类型说明符 标识符
      • 模板参数:template <参数表> class标识符

    例9-1 函数模板的示例

    //9_1.cpp
    #include <iostream>
    using namespace std;
    
    template <class T>  //定义函数模板
    void outputArray(const T *array, int count) {
        for (int i = 0; i < count; i++)
            cout << array[i] << " "; //如果数组元素是类的对象,需要该对象所属类重载了流插入运算符“<<”
        cout << endl;
    }
    
    int main() {     
        const int A_COUNT = 8, B_COUNT = 8, C_COUNT = 20;
        int a [A_COUNT] = { 1, 2, 3, 4, 5, 6, 7, 8 };
        double b[B_COUNT] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8 };
        char c[C_COUNT] = "Welcome!";
    
        cout << " a array contains:" << endl;
        outputArray(a, A_COUNT);    
        cout << " b array contains:" << endl;
        outputArray(b, B_COUNT);    
        cout << " c array contains:" << endl;
        outputArray(c, C_COUNT);    
        return 0;
    }
    运行结果如下:
    a array contains:
    1 2 3 4 5 6 7 8
    b array contains:
    1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 
    c array contains:
    W e l c o m e!

    注意

    • 一个函数模板并非自动可以处理所有类型的数据
    • 只有能够进行函数模板中运算的类型,可以作为类型实参
    • 自定义的类,需要重载模板中的运算符,才能作为类型实参
  • 相关阅读:
    linux socket里的send和recv,阻塞与非阻塞socket、TCP与UDP在这方面的区别
    leetcode 149 Max Points on a Line
    leetcode 126 Word Ladder II
    leetcode 123 Best Time to Buy and Sell Stock III
    LC 297 Serialize and Deserialize Binary Tree
    栈和队列问题
    链表问题
    day17--权限管理和配置服务
    谷粒学院功能简介及系统架构
    day01--MybatisPlus的使用
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/4925451.html
Copyright © 2011-2022 走看看