C++支持重载而C语言不支持的原因解析

C++是C语言的继承,它既可以进行C语言的过程化设计,也可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。

在分析为什么C++支持重载而C语言不支持的原因之前,我们先来了解一下函数重载的概念。

函数重载是指在同一作用域类,一组函数的函数名相同,参数列表不同。这里的参数列表不同,可以是参数个数不同,也可以是参数的类型不同。函数的返回值可同可不同。

void Overload(int x){}
void Overload(int x,int y){}    //参数个数不同
void Overload(double x){}       //参数类型不同

但是需要注意的是,main函数不能重载。因为main函数是程序的入口,只能有一个。

介绍完函数重载的概念,我们下面来分析一下编译器的翻译步骤。

在学习C++的时候,我们就已经了解过,翻译过程一般分为:预处理——编译——汇编——链接。

在预处理中,主要完成:(1)头文件展开;(2)宏替换;(3)条件编译;(4)去掉注释。——>生成.i文件

在编译阶段,主要完成:(1)检查语法;(2)生成汇编代码。——>生成.s文件

在汇编阶段,主要完成转成二进制机器码的工作。——>生成.o文件

在链接阶段,将之前生成的文件链接在一起,生成可执行文件。——>生成a.out

在链接之前,每个文件都是独立向下进行的,每个文件之前没有交集。所以支持函数重载,是在链接阶段完成的。C语言在链接时,根据函数名查找要调用的函数,而C++则是根据函数名和参数类型来查找要调用的函数。所以,如果C语言中出现一个以上的同名函数,就会在链接阶段报错;而C++中则不会,因为即使函数同名,但是它们的参数类型和个数有所差异。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值