在编程为函数命名时,我们总希望可以见其名知其义。不过,有些时候表义相同的函数处理的数据对象类型和数量不同,实现的代码也存在一定差别。C++中允许定义多个同名函数,各个函数的参数集是不同的,这些函数称为重载函数。编译器在编译时根据不同参数的类型和个数选择调用哪个函数。函数重载常用于生成几个类似任务而处理数据个数和类型不同的函数。
如下是一个简单的例子,用来求两个或三个整数的最大值。
#include<iostream>
using namespce std;
int max(int,int);
int max(int,int,int);
int main(){
cout<<max(5,3)<<endl;
cout<<max(4,8,3)<<endl;
}
int max(int a,int b)
{ return a > b?a:b;}
int max(int a,int b,int c){
int t;
t = max(a,b);
return max(t,c);
}
注意,C++编译器只根据参数表进行重载函数的调用匹配,函数返回值的内容不起作用。例如:
int average(int,int);
double average(int,int); //编译报错,编译器认为函数重复说明。
另外要注意重载函数中使用默认参数时可能产生的二义性。例如:
int max(int,int);
int max(int,int,int = 0);
则调用 max(5,3),无法选择调用版本。