通过函数模板求两个整数或3个整数中的最大数。如果输入两个整数,程序就输出这两个整数中的最大数,如果输入3个整数,程序就输出这3个整数中的最大数。

编写程序:

运行结果:

程序分析:

        程序第3~8行是定义模板。定义函数模板的一般形式为
        template<typename T>
        通用函数定义

        template <class T>
        通用函数定义
        template的含义是"模板",尖括号中先写关键字typename(或class),后面跟一个类型参数T,这个类型参数实际上是一个虚拟的类型名,表示模板中出现的T是一个类型名,但是现在并未指定它是哪一种具体的类型。在函数定义时用T来定义变量a,b,c,显然变量a,b,c的类型也是未确定的。要等到函数调用时根据实参的数据类型来确定T是什么类型。其实也可以不用T而用任何一个标识符,许多人习惯用T(T是Type的第1个字母),而且用大写,以与实际的类型名相区别。
        class和typename的作用相同,都是表示"类型名",二者可以互换。以前的C++程序员都用class。typename是不久前才被加到标准C++中的,因为用class容易与C++中的类混淆。而用typename的含义很清楚,是数据类型名(而不是类名)。

        有些读者可能对模板中通用函数的表示方法不习惯,其实在建立函数模板时,用虚拟的数据类型名T代替具体的数据类型即可。在对程序进行编译时,遇到第13行调用函数max(i1,i2,i3),编译系统会将函数名max与函数模板max相匹配,将实参的类型代了函数模板中的虚拟类型T。此时相当于已定义了一个函数:

        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>
可以看到,用函数模板比函数重载更方便,程序更简洁。但应注意它只适用于函数体相同、函数的参数个数相同而数据类型不同的情况,如果参数的个数不同,则不能用函数模板。

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值