• 函数模板


    #include <iostream>
    using namespace std;
    template<typename T> //模板声明,其中T为类型参数
    T max(T a,T b,T c) //定义一个通用函数,用T作虚拟的类型名
    {   if(b>a) a=b;
      if(c>a) a=c;
      return a;
    }
    int main( )
    {int i1=185,i2=-76,i3=567,i;
    double d1=56.87,d2=90.23,d3=-3214.78,d;
    long g1=67854,g2=-912456,g3=673456,g;
    i=max(i1,i2,i3); //调用模板函数,此时T被int取代
    d=max(d1,d2,d3); //调用模板函数,此时T被double取代
    g=max(g1,g2,g3); //调用模板函数,此时T被long取代
    cout<<″i_max=″<<i<<endl;
    cout<<″f_max=″<<f<<endl;
    cout<<″g_max=″<<g<<endl;
    return 0;
    }

    运行结果与例4.5相同。为了节省篇幅,数据不用
    cin语句输入,而在变量定义时初始化。
    程序第3~8行是定义模板。定义函数模板的一般形
    式为
    template < typename T> 或 template <class T>
    通用函数定义 通用函数定义
    在建立函数模板时,只要将例4.5程序中定义的第一
    个函数首部的int改为T即可。即用虚拟的类型名T
    代替具体的数据类型。在对程序进行编译时,遇到
    第13行调用函数max(i1,i2,i3),编译系统会将函数
    名max与模板max相匹配,将实参的类型取代了函
    数模板中的虚拟类型T。此时相当于已定义了一个
    函数:

    int int max(int a,int b,int c)
    {if(b>a) a=b;
    if(c>a) a=c;
    return a;
    }
    然后调用它。后面两行(14,15行)的情况类似。
    类型参数可以不只一个,可以根据需要确定个数。

    template <class T1,typename T2>
    可以看到,用函数模板比函数重载更方便,程序更
    简洁。但应注意它只适用于函数的参数个数相同而
    类型不同,且函数体相同的情况,如果参数的个数
    不同,则不能用函数模板。

  • 相关阅读:
    C语言内存分析
    算法之快速排序
    单链表逆转
    C程序设计语言之一
    vim插件配置(一)
    makefile示例
    cocos2d基础入门
    Makefile
    Makefile
    GCC编译四阶段
  • 原文地址:https://www.cnblogs.com/lbangel/p/3177348.html
Copyright © 2020-2023  润新知