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!

    注意

    • 一个函数模板并非自动可以处理所有类型的数据
    • 只有能够进行函数模板中运算的类型,可以作为类型实参
    • 自定义的类,需要重载模板中的运算符,才能作为类型实参
  • 相关阅读:
    初识ES6
    初识NODE
    AJAX详解
    PHP 文件与目录操作函数总结
    PHP封装一个通用好用的文件上传处理类
    PHP基础之 错误处理 及 异常处理
    PHP基础OOP(二) 多态
    PHP基础之 重载 的实现方式
    CCS3的过渡、变换、动画以及响应式布局、弹性布局
    CSS之盒子模型(由浅到深的理解)
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/4925451.html
Copyright © 2011-2022 走看看