函数的重载
在编写代码过程中,我们发现有时可能会需要多个功能类似的函数,仅仅在个别地方不同。例如我们将两个变量进行相加的时候,可能我们需要让int、double等类型可以相互相加。在C语言的学习中,我们只能通过函数的地址将参数中变量的地址传入函数的内部,因此程序员需要对这种情况分别调用不同的函数,其函数原型如下:
int Add1(int a, int b); //int类型与int类型进行相加
double Add2(int a, double b); //int类型与double类型进行相加
double Add3(double a, int b); //double类型与int类型进行相加
double Add4(double a, double b); //double类型与double类型进行相加
但C++中对功能相似的函数就不需要分别调用不同函数。C++可以将功能相同的函数命名相同,这是因为C++支持函数的重载(Function Overloading),但需要重载函数的参数列表各不相同。通过函数的重载,同一函数名可以使用多个功能。
下面对变量的相加进行示范:
#include<iostream>
using namespace std;
int Add(int a, int b)
{
return a + b;
}
double Add(int a, double b)
{
return a + b;
}
double Add(double a, int b)
{
return a + b;
}
double Add(double a, double b)
{
return a + b;
}
int main()
{
int a = 1;
int b = 2;
double c = 3.5;
double d = 2.2;
cout << Add(a, b) << endl;
cout << Add(a, c) << endl;
cout << Add(b, d) << endl;
cout << Add(c, d) << endl;
system("pause");
return 0;
}
运行结果:
3
4.5
4.2
5.7
通过示范可以知道函数的重载都是在同一个作用域中(同一个类内、同一个名字空间内)函数名相同但参数列表不同的函数。重载可以让一个函数名拥有多个功能,在代码的编写过程中可以可以使命名更加方便,也使得函数的调用更加灵活。
在使用重载的过程,应是函数功能相似的函数。最好不要将不相干的函数进行重载,这样会使代码的可读性降低。
函数是如何实现重载
在C++中在进行代码编译时会根据函数的参数列表对函数进行重命名,因此参数列表不同相同的函数名会被重命名为不同的函数名。但发生函数调用时,再根据函数调用时传入的参数类型去逐个比配,已选择对应函数。不同的编译器在对C++代码进行编译时的重命名方式不同。
函数的重载的规则:
- 函数名必须相同
- 参数列表必须不同
- 返回值的类型对重载没有影响
注释:
- 参数列表不同包含参数个数不同、参数类型不同、参数顺序不同。
- 函数的重载仅仅时语法层面的,本质上它们还是不同的函数,有着不同的存放地址,占用不同的内存。