为什么c++支持重载而c不支持?

c++

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。


为什么C++支持重载?C语言不支持

首先在了解这个问题之前,我们先要清楚什么是函数重载,以及编译器的翻译过程是怎样的。

  1. 函数重载:在同一个作用域中,如果有多个函数的名字相同,但是形参列表不同(参数类型不同或参数个数不同),返回值类型可同也可不同,我们称之为重载函数。重载的函数是通过形参列表区分的,与返回值类型无关。函数重载其实是”一个名字,多种用法”的思想,不仅函数可以重载,运算符也可以重载。
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++)