函数模板
#include <iostream>
using namespace std;
int max(int,int);
double max(double,double);
int main()
{
cout<<"max(3,5)="<<max(3,5)<<endl;
cout<<"max(5.3,1.5)="<<max(5.3,1.5)<<endl;
return 0;
}
int max(int x,int y)
{
return x>y?x:y;
}
double max(double x,double y)
{
return x>y?x:y;
}
上面的例子就是上一节的重载函数。我们可以发现一个新的问题:两个重载函数的函数体是一样的。这样也不符合代码简洁的理念,于是就提出了函数模板的机制。函数模板可以用来创建一个通用的函数,以支持不同的参数类型,避免重载函数的函数体的重复代码。函数模板的关键是类型参数化。定义函数模板的格式是:
template <class 类型参数名1,class 类型参数名2...>
模板函数的返回类型 模板函数名(参数表)
{
函数体
}
看着麻烦,举个例子就简单了,还是比较大小,我们用函数模板实现:
#include <iostream>
using namespace std;
template <class T>
T max(T,T);
int main()
{
cout<<"max(3,5)="<<max(3,5)<<endl;
cout<<"max(5.3,1.5)="<<max(5.3,1.5)<<endl;
return 0;
}
T max(T x,T y)
{
return x>y?x:y;
}
第3行将类型定义成一个参数T,第4行是max函数的声明:接受T类型的两个参数,并返回T类型的值。第7行和第8行调用max函数,实参传递过来什么类型,形参x和形参y就是什么类型。