一、什么是函数重载
函数重载的定义:在同一个作用域内,使用不同的函数名,实现不同的函数功能,而且编译器不会发生报错的情况。
函数重载的条件以及注意事项:
1、在同一个作用域内
2、相同的函数名.
3、函数参数的个数、顺序、类型不同
4、函数重载与返回值无关
二、函数重载发生的原因
函数被创建之后,函数名会被储存在计算机中,以便于在CPU执行命令时,能够接收指令并调用已经创建好的函数。那么函数是以什么样的方式存储在计算机中的呢?
1、C和C++是否都能发生函数重载
答案是显而易见的:C语言是不能发生函数重载的,而C++是可以发生函数重载的。
这是因为编译器对于两种语言中函数的存储方式是不一样的(下文将详细讲述)
2、为什么C++中可以发生函数重载
在C++中:
#include<iostream>
using namespace std;
void fun(int a){cout<<"okk"<<endl;}
void fun(int a,int b){cout<<"okk"<<endl;}
void fun(float a){cout<<"okk"<<endl;}
void fun(int a,float b){cout<<"okk"<<endl;}
void fun(float b,int a){cout<<"okk"<<endl;}
以上代码展示了在C++中,发生函数重载的情况。
我们可以看到新定义的5个函数都采用了“fun”这个函数名;
下面我们将进行逐个分析:
void fun(int a){cout<<"okk"<<endl;}
void fun(int a,int b){cout<<"okk"<<endl;}
上述代码表示,函数重载的条件:
参数的个数不同;
在fun(int a, int b)中,含有a 和 b两个整形的参数,而fun(int a)中,只有a这一个整形参数,因此参数的个数不同可以发生函数重载。
void fun(int a){cout<<"okk"<<endl;}
void fun(float a){cout<<"okk"<<endl;}
上述代码表示,函数重载的条件:
参数的类型不同;
在fun(int a)中,含有a 一个整形的参数,而fun(float a)中,只有a这一个浮点型参数,因此参数的类型不同可以发生函数重载。
void fun(int a,float b){cout<<"okk"<<endl;}
void fun(float b,int a){cout<<"okk"<<endl;}
上述代码表示,函数重载的条件:
参数的顺序不同;
在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中不能发生函数重载是由于函数的记录方式不同;
标签:函数,int,C++,fun,理解,参数,重载 From: https://blog.csdn.net/s386199/article/details/139660978