4.5 函数重载
在同一作用域内可以有一组具有相同名字但不同参数的函数。这被称为函数重载。函数重载的概念是:同一个函数名可以对应多个函数实现。例如,可以用函数名 add
定义多个函数,每个函数实现的功能是求和,即求两个操作数的和。一个函数实现是求两个整型数之和,另一个函数实现是求两个浮点型数之和,还有一个函数实现是求两个复数之和。每个函数对应着一个函数体。这些函数的名字相同,但是函数的参数类型不同。这就是函数重载的概念。
函数重载要求编译器能够根据参数来区分函数,即采用不同的函数实现。定义重载函数时,要求在参数的个数或类型上有所不同,或者在参数顺序上有所不同。否则,将无法实现重载。
4.5.1 参数类型上不同的重载函数
参数类型不同的重载函数返回值类型可以相同也可以不同。下面举一个参数类型不同的重载函数的例子。
例4.14 求两个操作数之和:
#include <iostream.h>
int add(int x, int y) {
return x + y;
}
double add(double a, double b) {
return a + b;
}
void main() {
cout << add(5, 10) << endl;
cout << add(5.5, 10.0) << endl;
}
该程序中,main()
函数调用相同名字 add
的两个函数,前一个 add()
函数对应的是两个 int
型数求和的函数实现,后一个 add()
函数对应的是两个 double
型数求和的函数实现。这便是函数的重载。分析该程序的输出结果如下:
15
15.5
请读者上机验证一下。
4.5.2 参数个数上不同的重载函数
下面举一个在参数个数上不同的重载函数的例子。
例4.15 找出几个 int
型数中的最小者:
#include <iostream.h>
int min(int a, int b) {
return a < b ? a : b;
}
int min(int a, int b, int c) {
int t = min(a, b);
return min(t, c);
}
int min(int a, int b, int c, int d) {
int t1 = min(a, b);
int t2 = min(c, d);
return min(t1, t2);
}
void main() {
cout << min(13, 5) << endl;
cout << min(13, 5, 4) << endl;
cout << min(13, 5, 4, 9) << endl;
}
该程序中出现了函数重载,函数名 min
对应着三个不同的实现,函数的区分依据是参数个数的不同。这里的三个函数实现中,参数个数分别为2, 3和4。在调用函数时根据实参的个数来选取不同的函数实现。
函数重载在C++中是非常常用的,它使得代码更具可读性和灵活性。通过合理使用函数重载,可以简化程序设计,提高代码的重用性。