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++中则不会,因为即使函数同名,但是它们的参数类型和个数有所差异。

扫描二维码关注公众号,回复: 2349349 查看本文章

猜你喜欢

转载自blog.csdn.net/cecilia3333/article/details/81101064