C++ 函数重载
函数重载
-
不同的函数主要是通过函数返回值类型、函数名和参数列表来区别的
-
同一作用域内,函数名字相同,参数列表不同(参数类型不同包括参数的顺序不同、参数个数不同)的多个函数(返回值类型可以不同)是重载的关系
void fun();
void fun(int a);
void fun(int a, float f);
void fun(float f, int a);
void fun(int a, double d);
上面声明的 5 个函数互为重载函数,它们之间满足参数类型不同和参数个数不同两个条件中的一个或两个,OS 会根据参数的不同,自动找到要调用的函数
函数参数缺省值/默认值
-
函数形参可全部指定默认值,也可部分指定默认值,部分指定的时候,从右向左连续指定,随意指定会出现重定义的错误
-
有默认值的函数形参,可不用传递实参;若给有默认值的函数形参传递了实参,默认值会被覆盖掉
#include <iostream>
using namespace std;
void fun1(int a = 10, double d = 3.4) { // 全部指定默认值
cout << a << " " << d << endl;
}
// 设置函数形参的默认值只需要在函数声明的地方进行,函数定义的地方不用写,
// 写了会报重定义默认参数的错误
void fun2(int a, double d = 3.5, char c = 'a'); // 部分指定默认值,从右向左
int main() {
fun1(); // 不传实参
fun1(11); // 从左向右传递一个实参,覆盖第一个形参默认值
fun1(12, 13.4); // 从左向右传递两个实参,覆盖两个形参的默认值
fun2(4); // 给未指定默认值的形参传递实参
fun2(5, 3.6);
fun2(6, 3.8, 'c');
system("pause");
return 0;
}
void fun2(int a, double d, char c) {
cout << a << " " << d << " " << c << endl;
}
注意
- 函数有带默认值的形参与重载结合使用,可能会造成调用不明确
void fun(int a);
void fun(int a, double d = 2.3);
// 都可以用 fun(3); 调用,会报错
-
函数返回值不能作为函数重载的条件
-
形参是浮点型 float、double 的互为重载的函数,调用时要注意传递实参的形式
void fun(float f);
void fun(double d);
// fun(2.3f); 或 fun(2.3F); 调用形参为 float 的函数
// fun(2.3); 调用形参为 double 的函数,因为C/C++浮点型数据默认是 double 型