函数重载的定义:在同一个作用域内,使用不同的函数名,实现不同的函数功能,而且编译器不会发生报错的情况。
函数重载的条件以及注意事项:
1、在同一个作用域内
2、相同的函数名.
3、函数参数的个数、顺序、类型不同
4、函数重载与返回值无关
函数被创建之后,函数名会被储存在计算机中,以便于在CPU执行命令时,能够接收指令并调用已经创建好的函数。那么函数是以什么样的方式存储在计算机中的呢?
答案是显而易见的:C语言是不能发生函数重载的,而C++是可以发生函数重载的。
这是因为编译器对于两种语言中函数的存储方式是不一样的(下文将详细讲述)
在C++中:
- #include
- using namespace std;
- void fun(int a){cout<<"okk"<
- void fun(int a,int b){cout<<"okk"<
- void fun(float a){cout<<"okk"<
- void fun(int a,float b){cout<<"okk"<
- void fun(float b,int a){cout<<"okk"<
以上代码展示了在C++中,发生函数重载的情况。
我们可以看到新定义的5个函数都采用了“fun”这个函数名;
下面我们将进行逐个分析:
- void fun(int a){cout<<"okk"<
- void fun(int a,int b){cout<<"okk"<
上述代码表示,函数重载的条件:
参数的个数不同;
在fun(int a, int b)中,含有a 和 b两个整形的参数,而fun(int a)中,只有a这一个整形参数,因此参数的个数不同可以发生函数重载。
- void fun(int a){cout<<"okk"<
- void fun(float a){cout<<"okk"<
上述代码表示,函数重载的条件:
参数的类型不同;
在fun(int a)中,含有a 一个整形的参数,而fun(float a)中,只有a这一个浮点型参数,因此参数的类型不同可以发生函数重载。
- void fun(int a,float b){cout<<"okk"<
- void fun(float b,int a){cout<<"okk"<
上述代码表示,函数重载的条件:
参数的顺序不同;
在fun(int a,float b)中,先后含有a 一个整形的参数,和b这个浮点型参数,而fun(float b,int a)中,先后含有b 一个浮点形的参数,和a这个整型参数,因此参数的顺序不同可以发生函数重载。
我们刚刚进行了函数重载条件的探讨,接下来我们来讨论一下,为什么在C++中能进行函数重载。
三、函数重载为什么能够发生
1、C语言中的函数在编译器中的记录方式
- void fun()
- {
- int a=1;
- printf("%d",a);
- }
以上函数是在C语言中进行创建的,在编译器中会被记录为:fun()
所以无论如何改变函数的参数,在编译器中都会被记录为fun()
因此在C语言中,无法进行函数重载
2、C++中的函数在编译器中的记录方式
- void fun(int a,int b){
-
- }
- void fun(int a){
-
- }
以上函数是在C++中进行创建的,其在编译器中的记录方式分别为:
fun() i i 和 fun() i
由此可知,在C++中,函数的记录方式和参数是息息相关的
由此可知,在C++中可以发生函数重载,在C中不能发生函数重载是由于函数的记录方式不同;
-
相关阅读:
分页文件pagefile.sys引出的疑问
Visual Studio 2022开发Arduino详述
Eureka上集成Spring Cloud 微服务网关 gateway
运动蓝牙耳机哪种款式好用、专业的蓝牙运动耳机推荐
黑灰产技术手段不断“进阶”,如何防御双十二“羊毛党”?
园子的脱困努力-云厂商合作:领取阿里云免费ECS试用资源,部署Java Web环境,送小礼品
SQLite 学习笔记1 - 简介、下载、安装
基于QtAv及ffmpeg开发的视频播放器
使用 C 或 C++ 扩展 Python
3. 运行时间
-
原文地址:https://blog.csdn.net/s386199/article/details/139660978