函数模板
若使用函数重载:
long longg(long c[6])
{
long maxx=-1;
for(int i=0;i<5;i++)
{
if(maxx<c[i])
maxx=c[i];
}
return maxx;
}
float floatt(float b[6])
{
float maxx=-1;
for(int i=0;i<5;i++)
{
if(maxx<b[i])
maxx=b[i];
}
return maxx;
}
int intt(int a[6])
{
int maxx=-1;
for(int i=0;i<5;i++)
{
if(maxx<a[i])
maxx=a[i];
}
return maxx;
}
若使用函数模板:
template <class T>
T f(T *a)
{
T maxx=-1;
int i;
for(i=0;i<5;i++)
{
if(maxx<a[i])
maxx=a[i];
}
return maxx;
}
函数模板注意事项:
⑴ 函数模板允许使用多个类型参数,但在template定义部分的每个形参前必须有关键字typename或class,即:
template<class 数据类型参数标识符1,…,class 数据类型参数标识符n>
<返回类型><函数名>(参数表)
{
函数体
}
⑵ 在template语句与函数模板定义语句<返回类型>之间不允许有别的语句。如下面的声明是错误的:
template<class T>
int I;//错误!!!
T min(T x,T y)
{
函数体
}
⑶ 模板函数类似于重载函数,但两者有很大区别:函数重载时,每个函数体内可以执行不同的动作,但同一个函数模板实例化后的模板函数都必须执行相同的动作。
类似:
int min( int a, int b ) {
return a < b ? a : b;
}
double min( double a, double b ) {
return a < b ? a : b;
}
template <class Type>
Type min( Type a, Type b ) {
return a < b ? a : b;
}