【C++】函数重载
🦄个人主页:小米里的大麦-CSDN博客
🎏所属专栏:C++_小米里的大麦的博客-CSDN博客
🎁代码托管:C++: 探索C++编程精髓,打造高效代码仓库 (gitee.com)
⚙️操作环境:Visual Studio 2022
目录
一、前言
二、函数重载的规则
三、代码示例
函数重载的原因
四、常见错误
总结
共勉
一、前言
- 自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。
- 比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!”
在C++中,允许在同一作用域中声明几个功能类似的同名函数,函数重载(Function Overloading)是指在同一个域中,可以定义多个函数名相同但参数列表不同的函数。是函数的一种特殊情况,编译器通过参数的类型、顺序和数量来区分不同的重载函数,而不仅仅是通过函数名。函数重载的关键是参数的数量、类型或顺序有所不同。常用来处理实现功能类似数据类型不同的问题。
二、函数重载的规则
- 参数数量不同:可以有不同数量的参数。
- 参数类型不同:可以有相同数量但类型不同的参数。
- 参数顺序不同:当参数类型不同时,可以按不同的顺序进行重载。
注意:补充返回值不同是不能进行重载的,返回值类型不作为区分重载的。
三、代码示例
#include <iostream>
using namespace std;
// 重载函数1:接受一个int参数
void display(int i) {
cout << "Integer: " << i << endl;
}
// 重载函数2:接受一个double参数
void display(double d) {
cout << "Double: " << d << endl;
}
// 重载函数3:接受两个int参数
void display(int i, int j) {
cout << "Two integers: " << i << " and " << j << endl;
}
// 重载函数3:接受一个char和一个int参数
void display(char i, int j) {
cout << "Two integers: " << i << " and " << j << endl;
}
int main() {
display(5); // 调用第一个重载函数
display(3.14); // 调用第二个重载函数
display(2, 3); // 调用第三个重载函数
display('a', 4); // 调用第四个重载函数
return 0;
}
输出:
Integer: 5
Double: 3.14
Two integers: 2 and 3
Two integers: a and 4
函数重载的原因
- 简化代码:相同的功能可以通过相同的函数名实现,而不必为多种情况定义不同的函数名。
- 代码的约束性更好:通过相同的函数名,可以让代码具有一致性和可维护性。
四、常见错误
- 仅返回通过值不同进行重载是不允许的。
- 默认参数可能导致重载不一致。
调用func(10)时会发生歧义,编译器不知道该调用哪一个。
#include <iostream>
using namespace std;
void func(int a, int b = 5);
void func(int a);
void func(int a, int b)
{
cout << "a = " << a << " b = " << b << endl;
}
void func(int a)
{
cout << "a = " << a << " b = 5" << endl;
}
int main()
{
func(10); // “func”: 对重载函数的调用不明确
return 0;
}
【扩展:对vs下函数名修饰规则】:
C/C++ 函数调用约定-CSDN博客
总结
C++的函数重载弥补了C语言不能重命名/重定义的缺陷,有了函数重载,会减小不会取名的程序员的负担,并且通过相同的函数名,可以让代码具有一致性和可维护性,极大增强了程序员的效率!