问题及代码:
#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;
double d1=56.87,d2=90.23,d3=-3214.78;
long g1=67854,g2=-912456,g3=673456;
cout<<"i_max="<<max(i1,i2,i3)<<endl; //调用模板函数,此时T被int取代
cout<<"f_max="<<max(d1,d2,d3)<<endl; //调用模板函数,此时T被double取代
cout<<"g_max="<<max(g1,g2,g3)<<endl; //调用模板函数,此时T被long取代
cout<<"c_max="<<max('1','a','A')<<endl; //调用模板函数,此时T被long取代
return 0;
}
运行结果:
知识点总结:
建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,适用于函数体相同,函数的参数个数相同而类型不同的情况。
学习心得:
template<typename T>是一个虚拟的类型名,等到函数调用时根据实参的类型来确定T的类型,在这个代码中,T的类型被取代成int,double,long的类型.