一、函数模板
形式:template<<模板参数表>>
<类型> <函数名>(<参数表>)
{
}
模板参数表形式为: class <类型参数>(或新的关键字typename <类型参数>)
注意:此处的关键字class与一般的类无关;“类型参数“可以是任何一个合法的标识符。
编写一个求绝对值的函数模板,并进行测试
#include<iostream>
using namespace std;
#include<cmath>
template <class T>
T abs(T a) //这里的T表示函数abs的返回值类型以及参数a的类型都是T型的
{
return fabs(a);
}
int main()
{
int a;
double c;
cin>>a>>c;
cout<<abs(a);
cout<<abs(c);
return 0;
}
当模板中带有多个参数类型时
template <class T1,class T2,class T3>
void fun(T1 a,T2 b,T3 c)
{
}
尝试使用函数模板,编写以下函数并测试
函数名Average,包括4个参数,前三个参数为三门课程的成绩(可能为整数,也可能浮点数,使用模板),第四个参数为班级的平均分(浮点数类型,不用模板),在Average函数内,计算并显示三门课程的平均成绩,并与设定的班级平均分比较,如果大于则输出高于班级平均分,否则输入低于班级平均分。
例如Average(82.5,80.5,90.5,80.6); Average(80,90,85,80.6);前三个数字为三门课的成绩,第四个80.6为预先设定的班级平均分
#include<iostream>
using namespace std;
#include<cmath>
template <class T>
T Average(T a,T b,T c,double d)
{
T s=(a+b+c)/3.0;
cout<<"平均成绩为:"<<s<<endl;
if(s>d)
cout<<"高于班级平均分"<<endl;
else if(s<d)
cout<<"低于班级平均分"<<endl;
return 0;
}
int main()
{
double a,b,c;
int a1,b1,c1;
double d;
cin>>a>>b>>c>>d;
Average(a,b,c,d);
cin>>a1>>b1>>c1>>d;
Average(a,b,c,d);
return 0;
}
二、类模板
template<<模板参数表>>
class<类名>
{
}
使用模板类的第一步是定义一个模板类的对象
<类名> <<类型实参>> <对象>
例如:MAX <int> i(3,4);