zoukankan      html  css  js  c++  java
  • C++中函数模板的理解

    一.函数模板(function Template)

    所谓函数模板,实际上就是建立一个通用函数。

    *函数定义时不指定具体的数据类型(使用虚拟类型代替),被调用时才知道数据的类型。

    *函数被调用时编译器根据实参反推数据类型-类型的参数化。

    形式如下

    //模板头与函数声明/定义永远是不可分割的整体
    template <typename 类型参数1 , 类型参数2 ,...>     typename也可改为class,早期的C++是用class
    返回值类型  函数名(形参列表){
             //在函数体中可以使用类型参数
    }
    

     下面看一个小例子,用一个模板函数去实现不同类型的数据交换。

    13 #include<iostream>                                 
    14 
    15 using namespace std;
    16 //书写函数模板
    17 template <typename T> void Swap(T& , T&);
    18 
    19 int main(int argc , char **argv)
    20 {
    21     int a =3 , b = 5;
    22     double c = 2.4 , d = 4.8;
    23     cout << "交换前:";
    24     cout << a << '	' << b << endl;
    25     Swap(a , b);
    26     cout << "排序后:";
    27     cout << a << '	' << b << endl;
    28     cout << "排序前:";
    29     cout << c << '	' << d <<endl;
    30     Swap(c , d);
    31     cout << "排序后:";
    32     cout << c << '	' << d <<endl;
    33 
    34     return 0;
    35 
    36 }
    37 
    38 template <typename T>
    39 void Swap(T &a , T &b)
    40 {
    41     T temp = a;
    42     a = b;
    43     b = temp;
    44 }          
    

    模板函数适合函数结构一样或者类似,都可以兼容的,我们只需要给他传递不同的数据类型。

    还有就是函数模板和函数重载并不是替换的关系,

    函数模板适合用于函数名和函数结构一样,且都可以兼容的。

    重载函数也是相同的函数名,但是他可以实现不同的业务需求。

  • 相关阅读:
    C# winform判断窗体是否已打开
    对象与json字符串转换类设计
    Redis 操作帮助类
    C# redis客户端帮助类
    RedisHelper Redis帮助类
    Vue.js实现tab切换效果
    Uni-app 使用总结
    C#中的委托和事件(续)
    12小时超级马拉松赛记
    2016年8月份
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/13311310.html
Copyright © 2011-2022 走看看