C++ | C++函数的重载
原创
©著作权归作者所有:来自51CTO博客作者细嗅蔷薇fei的原创作品,请联系作者获取转载授权,否则将追究法律责任
C++ | C++函数的重载
C++函数的重载
C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。
借助重载,一个函数名可以有多种用途。
实例1:
/*******************************************************************
* > File Name: classOverload.cpp
* > Create Time: 2021年09月13日 14:58:36
******************************************************************/
#include <iostream>
using namespace std;
void Swap(int a, int b)
{
cout << "a = " << a << ", b = " << b << endl;
int c;
c = a;
a = b;
b = c;
cout << "a = " << a << ", b = " << b << endl;
}
void Swap(char a, char b)
{
cout << "a = " << a << ", b = " << b << endl;
char c;
c = a;
a = b;
b = c;
cout << "a = " << a << ", b = " << b << endl;
}
void Swap(double a, double b)
{
cout << "a = " << a << ", b = " << b << endl;
double c;
c = a;
a = b;
b = c;
cout << "a = " << a << ", b = " << b << endl;
}
void Swap(bool a, bool b)
{
cout << "a = " << a << ", b = " << b << endl;
bool c;
c = a;
a = b;
b = c;
cout << "a = " << a << ", b = " << b << endl;
}
int main(void)
{
Swap(100, 1000);
Swap('a', 'b');
Swap(12.5, 33.5);
Swap(true, false);
return 0;
}
编译、运行:
PS E:\fly-prj\cplusplus\day11> make
g++ -o classOverload classOverload.cpp -g -Wall
PS E:\fly-prj\cplusplus\day11> .\classOverload.exe
a = 100, b = 1000
a = 1000, b = 100
a = a, b = b
a = b, b = a
a = 12.5, b = 33.5
a = 33.5, b = 12.5
a = 1, b = 0
a = 0, b = 1
注意,参数列表不同包括参数的个数不同、类型不同或顺序不同,仅仅参数名称不同是不可以的。函数返回值也不能作为重载的依据。
函数的重载的规则:
- 函数名称必须相同。
- 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
- 函数的返回类型可以相同也可以不相同。
- 仅仅返回类型不同不足以成为函数的重载。
C++ 是如何做到函数重载的
C++代码在编译时会根据参数列表对函数进行重命名,例如void Swap(int a, int b)
会被重命名为_Swap_int_int
,void Swap(float x, float y)
会被重命名为_Swap_float_float
。
当发生函数调用时,编译器会根据传入的实参去逐个匹配,以选择对应的函数,如果匹配失败,编译器就会报错,这叫做重载决议(Overload Resolution)。
不同的编译器有不同的重命名方式,这里仅仅举例说明,实际情况可能并非如此。
从这个角度讲,函数重载仅仅是语法层面的,本质上它们还是不同的函数,占用不同的内存,入口地址也不一样。