函数重载
类似于C++提供的库函数max()可以用来求两个数的最大值;如下所示
#include <iostream>
#include <algorithm>//需要包含头文件<algorithm>
using namespace std;
int main()
{
int a=9,b=10;
double x=1.2,y=8.7;
cout<<"int型的a和b之间最大值为:"<<max(a,b)<<endl;
cout<<"double型的x和y之间最大值为:"<<max(x,y)<<endl;
return 0;
}
//运行结果为
int型的a和b之间最大值为:10
double型的x和y之间最大值为:8.7
a与b均为int类型的数据,x与y为double型的数据,而这两对数据的比较确可以都使用一个函数来实现。这涉及到函数重载问题。
函数重载定义
函数重载是指在一个程序中,可以定义多个具有相同函数名,不同参数列表的函数(至少参数的类型或参数个数或参数类型的顺序不同)。这些函数被称为重载函数。
当调用一个重载函数时,编译系统将通过检查函数调用中的实参个数、类型和顺序来选择恰当的函数。
- 形参列表中形参个数相同,类型不同
#include <iostream>
using namespace std;
int Abs(int x)
{
return x>0?x:-x;
}
double Abs(double x)
{
return x>0?x:-x;
}
int main()
{
int a=-9;
double b=-2.4;
cout<<"a的绝对值为:"<<Abs(a)<<endl;
cout<<"b的绝对值为:"<<Abs(b)<<endl;
return 0;
}
上述代码中定义了两个具有相同函数名Abs()的函数,分别用来求int、double类型的数据的绝对值,在main()中调用是,编译系统会根据不同的实参调用不同的具体的函数。
也注意到,函数的返回值可以不同。
- 形参列表中形参个数不同
#include <iostream>
using namespace std;
int add(int a,int b)
{
return a+b;
}
int add(int a,int b,int c)
{
return a+b+c;
}
int main()
{
int x=10,y=20,z=50;
cout<<add(x,y)<<endl;
cout<<add(x,y,z)<<endl;
return 0;
}
//运行结果
x+y=30
x+y+z=80
注意到上述程序定义了两个具有相同名称的函数add(),不同的是第一个add()的形参列表中有两个int型的数据。第二个add()的形参列表有三个int类型的数据。
因此当计算两个int型的数据的和时,编译系统会选择第一个add()运行。
因此当计算三个int型的数据的和时,编译系统会选择第二个add()运行。
函数重载的情况非常多,不仅仅有这两种。