目录
引例:
使用函数重载实现:(略显繁琐)
#include<iostream>
using namespace std;
int max(int a,int b,int c);
double max(double a,double b,double c);
long max(long a,long b,long c);
int main()
{
int i1,i2,i3,i;
cin>>i1>>i2>>i3>>i;
i=max(i1,i2,i3);
cout<<"i_max="<<i<<endl;
double d1,d2,d3,d;
cin>>d1>>d2>>d3>>d;
d=max(d1,d2,d3);
cout<<"d_max="<<d<<endl;
long l1,l2,l3,l;
cin>>l1>>l2>>l3>>l;
l=max(l1,l2,l3);
cout<<"l_max="<<l<<endl;
}
int max(int a,int b,int c){
if(b>a)
b=a;
if(c>a)
c=a;
return a;
}
double max(double a,double b,double c){
if(b>a)
b=a;
if(c>a)
c=a;
return a;
}
long max(long a,long b,long c){
if(b>a)
b=a;
if(c>a)
c=a;
return a;
}
函数模板:替代多次重载函数的多次定义
- 所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型可以不具体指定,而是用一个虚拟的类型来代表
- 凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可
- 在调用函数是系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能
#include<iostream>
using namespace std;
template<typename T>
T max(T a,T b,T c){
if(b>a)
a=b;
if(c>a)
a=c;
return a;
}
int main()
{
int i1,i2,i3,i;
cin>>i1>>i2>>i3>>i;
i=max(i1,i2,i3);
cout<<"i_max="<<i<<endl;
double d1,d2,d3,d;
cin>>d1>>d2>>d3>>d;
d=max(d1,d2,d3);
cout<<"d_max="<<d<<endl;
long l1,l2,l3,l;
cin>>l1>>l2>>l3>>l;
l=max(l1,l2,l3);
cout<<"l_max="<<l<<endl;
}
定义函数模板:
- 先进行模板的声明再定义函数
Template<typename T>
Template<class T>
- 虚拟类型名即可被用于函数的定义
- 在对程序进行编译时,编译系统会将函数名与模板相匹配,将实参的类型取代了函数模板中的虚拟类型T
- 类型参数可以不止一个,可以根据需要确定个数