• 用最简单的方式理解函数重载


    一、什么是函数重载

    函数重载的定义:在同一个作用域内,使用不同的函数名,实现不同的函数功能,而且编译器不会发生报错的情况。

    函数重载的条件以及注意事项:

    1、在同一个作用域内

    2、相同的函数名.

    3、函数参数的个数、顺序、类型不同

    4、函数重载与返回值无关

    二、函数重载发生的原因

    函数被创建之后,函数名会被储存在计算机中,以便于在CPU执行命令时,能够接收指令并调用已经创建好的函数。那么函数是以什么样的方式存储在计算机中的呢?

    1、C和C++是否都能发生函数重载

    答案是显而易见的:C语言是不能发生函数重载的,而C++是可以发生函数重载的。

    这是因为编译器对于两种语言中函数的存储方式是不一样的(下文将详细讲述)

    2、为什么C++中可以发生函数重载

    在C++中:

    1. #include
    2. using namespace std;
    3. void fun(int a){cout<<"okk"<
    4. void fun(int a,int b){cout<<"okk"<
    5. void fun(float a){cout<<"okk"<
    6. void fun(int a,float b){cout<<"okk"<
    7. void fun(float b,int a){cout<<"okk"<

    以上代码展示了在C++中,发生函数重载的情况。

    我们可以看到新定义的5个函数都采用了“fun”这个函数名;

    下面我们将进行逐个分析:

    1. void fun(int a){cout<<"okk"<
    2. void fun(int a,int b){cout<<"okk"<

    上述代码表示,函数重载的条件:

    参数的个数不同;

    在fun(int a, int b)中,含有a 和 b两个整形的参数,而fun(int a)中,只有a这一个整形参数,因此参数的个数不同可以发生函数重载。

    1. void fun(int a){cout<<"okk"<
    2. void fun(float a){cout<<"okk"<

    上述代码表示,函数重载的条件:

    参数的类型不同;

    在fun(int a)中,含有a 一个整形的参数,而fun(float a)中,只有a这一个浮点型参数,因此参数的类型不同可以发生函数重载。

    1. void fun(int a,float b){cout<<"okk"<
    2. 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语言中的函数在编译器中的记录方式

    1. void fun()
    2. {
    3. int a=1;
    4. printf("%d",a);
    5. }

      以上函数是在C语言中进行创建的,在编译器中会被记录为:fun()

    所以无论如何改变函数的参数,在编译器中都会被记录为fun()

    因此在C语言中,无法进行函数重载

    2、C++中的函数在编译器中的记录方式

    1. void fun(int a,int b){
    2. }
    3. void fun(int a){
    4. }

    以上函数是在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