C++函数重载详解

函数重载的引入原因

在C语言中,函数名是唯一的,这样就导致具有类似功能的函数用了不同的名字,并且相同功能的函数因为数据类型的不同需要写好几种,比如下面的例子:

image-20221020140729878

所以为了解决这种问题,C++中引入了函数重载的概念。

函数重载的用法

函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数类型或个数或顺序(类型))不同,常用来处理实现功能类似数据类型不同的问题。

参数类型不同

image-20221020141116111

参数个数不同

image-20221020141318449

参数顺序(类型)不同

image-20221020141526509

并且以上这三种情况可以叠加。

c++支持函数重载的原理——名字修饰

为什么C无法支持函数重载而C++就支持呢?

在C/C++中,程序的运行需要经历:预处理、编译、汇编、链接。

对于每个源文件都需要进行以上操作,而在经历完汇编之后每个源文件内部都会生成一个符号表,符号表中的符号和源文件中的变量名、函数名是一一对应的(并不是说一模一样,而是一种映射关系)。在这里我们要知道一点,函数声明在符号表中是只记录符号而不记录地址的,只有函数定义才记录符号以及地址,所以我们想要调用函数的定义,就必须将每个文件链接起来,揉合符号表(将多个符号表合成一个),这样才能从声明找到定义。

但是在C语言中符号表中的符号和函数名是一模一样的,如果我们在C语言中写多个同名函数,这就导致了符号表中会存在多个同名符号,但这样就无法保证一一对应的映射关系了。所以C语言不支持函数重载。

截屏2022-10-20 14.52.34

而在C++中,符号表中的符号和源文件中的名字是不一样的,符号表中的符号添加了一些修饰规则(根据参数),所以就导致相同的函数名因为不同的参数列表,从而在符号表中的符号也不同,这样就解决了C语言不能一一对应的问题,这就是函数重载的原理。

截屏2022-10-20 15.00.37

返回类型为什么不能作为函数重载的依据?

函数的作用:将有效的输入值变换为唯一的输出值,同一输入总是对应同一输出。

如果返回类型支持函数重载的话,那么我们输入相同的数据,编译器将采用哪个重载函数呢?这会导致输入相同的数据,但是输出不同的答案,这很显然违背世界对函数的定义。

所以返回类型不能作为函数重载的依据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云朵c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值