函数重载

什么是函数重载?

函数重载是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文件



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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值