C++函数模板

C++提供了函数模板(functiontemplate)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。看下面的例子就清楚了。

 

#include<iostream>
usingnamespace std;
template<typenameT> //模板声明,其中T为类型参数
T max(T a,T b,T c) //定义一个通用函数,用T作虚拟的类型名
{
  if(b>a) a=b;
  if(c>a) a=c;
  return a;
}
 
intmain( )
{
  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="<<d<<endl;
  cout<<"g_max="<<g<<endl;
  return 0;
}


定义函数模板的一般形式为:

    template < typename T>

    通用函数定义  通用函数定义

    template <class T>

    通用函数定义  通用函数定义

 

在建立函数模板时,只要将例4.5程序中定义的第一个函数首部的int改为T即可。即用虚拟的类型名T代替具体的数据类型。在对程序进行编译时,遇到第16行调用函数max(i1, i2, i3),编译系统会将函数名max与模板max相匹配,将实参的类型取代了函数模板中的虚拟类型T。此时相当于已定义了一个函数:

intmax(int a, int b, int c)
{
   if(b>a) a=b;
   if(c>a) a=c;
   return a;
}

然后调用它。后面两行(17,18行)的情况类似。

 

类型参数可以不只一个,可以根据需要确定个数。如:

    template <class T1, typenameT2>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值