函数重载

来源:互联网 发布:淘宝人群标签是什么 编辑:程序博客网 时间:2024/06/05 09:15

什么是函数重载?

函数重载是c++,对c的一个扩充,在传统的c语言中,在同一个作用域内,函数名必须是唯一的,也就是说不允许出现同名函数,在c++中,引入函数重载,即:在同一作用域内,函数名相同,但函数的参数列表不同(参数类型,参数的个数),返回类型可同可不同。


如何实现函数重载?

在c语言中,在编译期间,会对函数进行重命名,都是在函数名之前加上下划线来命名,当出现同名函数时编译器将不知道调用哪个函数?就会出现故障,因此c语言中在同一作用域内不允许出现同名函数。那c++是如何实现函数重载的呢?


先看一段代码:

#define _CRT_SECURE_NO_WARNINGS 1#includeusing 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文件



接下来我们在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);编译系统无法确定调用哪一个函数



原创粉丝点击