正文

C++ 入门教程 第四章 4.7 函数模板2008-09-07 17:53:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yzrj/38142.html

分享到:

C++提供了函数模板(function template)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。看下面的例子就清楚了。
4.7 将例4.6程序改为通过函数模板来实现。#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);          //调用模板函数,此时Tint取代
 d=max(d1,d2,d3);          //调用模板函数,此时Tdouble取代
g=max(g1,g2,g3);          //调用模板函数,此时Tlong取代
 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 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>
可以看到,用函数模板比函数重载更方便,程序更简洁。但应注意它只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板。
 

阅读(1739) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册