为什么c++支持重载而c不支持?
2018-03-19 19:26
513 查看
c++
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。为什么C++支持重载?C语言不支持
首先在了解这个问题之前,我们先要清楚什么是函数重载,以及编译器的翻译过程是怎样的。
函数重载:在同一个作用域中,如果有多个函数的名字相同,但是形参列表不同(参数类型不同或参数个数不同),返回值类型可同也可不同,我们称之为重载函数。重载的函数是通过形参列表区分的,与返回值类型无关。函数重载其实是”一个名字,多种用法”的思想,不仅函数可以重载,运算符也可以重载。
void func(int a, int b) { ..... } void func(char a) { ...... } int main() { ..... func(1, 2); func(a); return0; }
注意:main函数不能重载,因为程序的入口只能有一个
2、翻译过程一般分为: 预处理—-编译——汇编——链接
预处理:展开头文件,宏替换,去掉注释,条件编译等工作。生成.i文件
编译:语法检查,生成汇编代码。 生成.s文件
汇编:将汇编代码转成机器码 。 生成.o文件
链接:将之前生成的文件链接到一起,生成可执行文件。 生成.out文件
如果有多个。c文件,注意 在链接之前各文件都是独立向下进行的,各文件之间没有交集。
所以支持重载问题就出在链接这个阶段上,c语言在链接的时候根据函数名找要调用的函数,而c++而是根据函数名和参数类型来寻找要调用的函数(函数名修饰规则);
3、缺省参数
在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。缺省分为全缺省和半缺省,
全缺省:函数的每个参数都给一个默认值
int add(int a=5,b=1)
半缺省:只给一部分参数给默认值,注意半缺省只能缺省右参数。
int add(int a,int b=1)
相关文章推荐
- 为什么c++支持重载而C语言不支持重载
- C语言为什么不支持重载,而C++支持
- 为什么C++支持重载,C语言不支持
- c++中为什么有不能重载的运算符(摘录)
- C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到
- C编程笔录(一)1.3: 为什么C不支持函数重载,而C++支持?
- 【C++】模板简述(四):模板为什么不支持分离编译?
- 命名空间,输入输出流,为什么支持重载,缺省,指针与引用
- 为什么Windows Phone 7不支持C++?
- C++ 为什么模板不支持分离编译?
- Objective-C runtime之消息(二)--为什么iOS不支持重载
- 为什么Windows Phone 7不支持C++?
- C++中模板为什么不支持分离编译
- C++语言笔试题目 C++中为什么用模板类&& 类中如何使用const &&函数重载,我们靠什么来区分调用的那个函数?靠返回值判断可以不可以
- 为什么在C++中对赋值号“=”的重载只能使用成员函数而不可以使用友元函数?求高手、大神帮我解答!
- C++ 中为什么模板不支持分离编译?
- C#为什么不能像C/C++一样的支持函数只读传参
- 为什么Go不支持函数和运算的重载
- 为什么Windows Phone 7不支持C++?
- 为什么c++中重载流操作符要用友元函数