什么是重载?
允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。
什么是函数重载?
函数的重载:
在同一个作用域类,一组函数的函数名相同,参数列表不同(个数不同/类型不同),返回值可同可不同。
问题来了,为什么C语言不支持重载,C++支持重载呢?
先来看看编译的整个过程:1、预处理(生成.i文件)→2、编译(生成.s文件,里面是汇编语言)→3、汇编(生成.o文件,二进制文件)→链接(生成.exe文件)
点击生成的.exe文件,就可以运行程序了。
讲了这么多,现在来分析一下实例:
声明一个函数:
void sum(int a,int b);
现编译器进行编译,编译完成之后。
C语言中,在库中名字为:_sum。
C++中,在库中名字为:_sum_int_int。
对该函数进行重载:
void sum(double a,double b);
现编译器进行编译,编译完成之后。
C语言中,在库中名字为:_sum。
C++中,在库中名字为:_sum_double_double。
编译的最后一个阶段:链接。
链接的是库文件,将生成的目标文件转化为可执行文件,都是找到目标文件的函数名进行链接。
在C语言中,C语言是函数式语言,一切功能都是由函数完成,函数和重载函数名字都一样,编译器会认为是函数重复声明,这样是不行的,会在链接时报错。
而在C++语言中,函数名是函数名+参数,函数名和重载函数名不同,在链接时不会报错。
因此C语言支持重载,C++语言不支持重载。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)