函数重载:
条件:
1、函数名相同
2、函数参数个数不同、参数类型不同、参数的顺序不同
注意事项:
1、返回值类型与函数重载无关
2、实参的隐式类型转换可能会产生二义性(这个会在下面的代码中体现)
默认参数
定义:
在C++中,定义函数时可以给形参指定一个默认的值,此时在调用这个函数时没有给这个形参赋值(没有对应的实参),那么就是使用这个默认的值,也就是说在调用函数时可以省略有默认值的参数。
注意事项:
1、默认参数只能按照右到左的顺序
2、如果函数同时有声明、实现,默认参数只能放在函数声明中
3、默认参数的值可以是常量、全局符号(全局变量、函数名)
注 : (如果函数的实参经常是同一个值, 此时可以考虑使用默认参数)
函数重载代码示例:
#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;
}
double add(double a, int b) {
return a + b;
}
int main() {
cout << add(1,2) << endl;
cout << add(1.2, 2) << endl;
cout << add(1,2,3) << endl;
getchar();
return 0;
}
运行结果:
默认参数代码示例:
int add(int a, int b, int c=1) {
return a + b + c;
}
int main() {
cout << add(1, 2) << endl;
getchar();
}
运行结果
二义性:代码如下所示,对于add(1,2),两个重载函数都可以被调用,此时编译器不知道选择哪个函数,就会产生二义性,所以编译会出错;(建议优先采用默认参数)
int add(int a, int b) {
return a + b;
}
int add(int a, int b, int c=1) {
return a + b + c;
}
int main() {
cout << add(1, 2) << endl;//编译会出错
getchar();
}