欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++函数重载

程序员文章站 2024-03-17 08:43:40
...

1.C与C++函数对比:


返回值:

C语言函数缺省返回值,默认为int。
C++不支持函数返回值缺省,如果一个函数没有返回值则必须指定为void。


参数列表:

在C语言中,函数没有指定参数列表时,默认可以接收任意多个参数。
在C++中,因为严格的参数类型检测,没有参数列表的函数,默认为void,不接收任何参数。但C++参数列表中可以存在缺省参数,C语言不可以。


2.C++缺省参数


定义

缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。


格式

在该缺省形参后边赋值上缺省时的值。
例:void fun (int a,int b,int c = 10)


分类

1.全缺省参数
例: void fun (int a,int b,int c = 10)
2.半缺省参数
例:void fun (int a = 1,int b = 2,int c = 10)


注意事项

a. 带缺省值的参数必须放在参数列表的最后面(从右往左依次,不可间隔跳跃)
错误案例:void fun (int a = 10,int b,int c = 30)
b. 缺省参数不能同时在函数声明和定义中出现,只能二者则其一
c. 缺省值必须是常量或者全局变量


3.函数重载


概念:


函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、顺序)必须不同,常用来处理实现功能类似数据类型不同的问题


构成重载的要求:


作用域相同,函数名相同,形参列表(参数个数、类型、顺序)不同
只是返回值不同的函数不构成函数重载

意义:


重载函数通常用来在同一个作用域内 用同一个函数名 命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。


拓展:


函数重载是一种静态多态:
(1)多态:用同一个东西表示不同的形态;
(2)多态分为:

静态多态(编译时的多态)
动态多态(运行时的多态);

(3)函数重载是一种静态多态;


C++函数重载


面试题


  1. C语言中为什么不能支持函数重载? C++中函数重载底层是怎么处理的?

C语言中编译器识别函数以“下划线加函数名的格式识别”即“_Add”(不考虑参数列表和返回值)


c++如下(_edcel调用约定):以问号开始+函数名aaa@qq.com@YA+返回值+参数列表aaa@qq.com


C++函数重载
C++函数重载


2、 C++中能否将一个函数按照C的风格来编译?


方法:extren “C”{ }
大括号里边的所有代码按C风格编译


3、下列代码运行结果是什么?有什么问题?

void fun()
{}
void fun(int a = 10)
{}

int main()
{
    fun();
    return 0;
}

编译不过,报错,重载不明确

相关标签: 函数重载