什么是函数重载?
函数重载是c++,对c的一个扩充,在传统的c语言中,在同一个作用域内,函数名必须是唯一的,也就是说不允许出现同名函数,在c++中,引入函数重载,即:在同一作用域内,函数名相同,但函数的参数列表不同(参数类型,参数的个数),返回类型可同可不同。
如何实现函数重载?
在c语言中,在编译期间,会对函数进行重命名,都是在函数名之前加上下划线来命名,当出现同名函数时编译器将不知道调用哪个函数?就会出现故障,因此c语言中在同一作用域内不允许出现同名函数。那c++是如何实现函数重载的呢?
先看一段代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include
using namespace std;
int Add(int a,int b)
{
return a+b;
}
double Add(double a,double b)
{
return a+b;
}
double Add(int a,double b)
{
return a+b;
}
int main()
{
int c=Add(1,2);
cout<
<
这是在windows平台上的实现,应看其编译后的代码,在VS编译器中,选择“属性”->“链接器”->“调试”->"生成映射文件",在当前的工程目录的Debug文件下会产生一个.map文件 ![](https://img-blog.csdn.net/20170707115251661?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzgxMTc0Nzg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
接下来我们在Linux平台上进行测试:
在测试阶段,首先应建一个文件,用于编写代码,编译c++文件用的是g++;我的虚拟机中没有g++那如何
就成了一个问题:经过在网上搜索,发现一个比较好的方法,以下是链接
http://m.blog.csdn.net/Footmart_C/article/details/51588523
在g++添加好之后,经过运行后可发现:(在linux中只有Add(int,int)和Add(double,double)两个函数)
经过在两个平台上的测试:可以发现虽然两个的命名格式不同,但用于去别同名函数的方法是一样的,即:参数列表不同,此例中是参数类型不同,在Windows中对函数的返回类型也做了考虑。
函数重载的优点:
1.减少了函数名的数量,避免了名字空间的污染,对于函数的可读性有了很大的提高;例如想要实现功能相同的函数,便可只用一个函数名,如print_int,print_string,只需用print来命名,
2.在静态多态中会使用到。
函数重载的注意事项:
1.函数的重载与带默认值的函数一起使用时,有可能引起二义性;
例如: void Date(int year=0,int month=0,int day=0);
void Date(int year);
当执行Date(2017);编译系统无法确定调用哪一个函数