C++函数模板
来源:互联网 发布:地方门户源码带手机版 编辑:程序博客网 时间:2024/06/05 07:51
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); //调用模板函数,此时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;
- }
#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 max(int a, int b, int c)
- {
- if(b>a) a=b;
- if(c>a) a=c;
- return a;
- }
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>
可以看到,用函数模板比函数重载更方便,程序更简洁。但应注意它只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板。
阅读全文
0 0
- 【c/c++】函数模板和模板函数
- C/C++ 函数模板
- c++:函数模板
- 【C++】函数模板
- 【c++】函数模板
- C语言函数模板
- C++:函数模板
- 【C++】模板函数总结!!!
- C/C++:函数模板与类模板
- [C/C++]模板函数与模板类
- 学习C++模板---模板函数
- Linux C/C++ 模板:函数模板
- C++,template,类模板和函数模板
- C++:函数模板、类模板及其特化
- C++---函数模板与类模板
- C++_函数模板基础知识
- C语言实现函数模板
- C++_函数模板基础知识
- 2015多校第7场 HDU 5373 The shortest problem 规律,暴力
- LaTeX插入多行多列图
- 学习笔记
- android加入谷歌地图(2)
- 根据@把邮箱的用户名和地址分离,以键值对应的方式放入HashMap中
- C++函数模板
- HDU6060 RXD and dividing【DFS】
- setTag()和getTag() android
- python学习之路-基础篇-day02
- 欢迎使用CSDN-markdown编辑器
- 最短零一串
- 知网抓取失败案例
- hdu6025dp前后缀和
- ES6学习笔记:解构