C++中函数重载详解

 更新时间:2022年02月07日 10:30:32   作者:Enthusiastic_boy  
大家好,本篇文章主要讲的是C++中函数重载详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

函数重载的概念

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

函数重载的应用

1.比如以下代码,函数名一样,而参数的类型不同,在调用的时候编译器会根据传递的参数自动进行匹配。

2.在例如以下代码,我们进行编译,都可以编译成功。

 3.接下来看一个有趣的现象,将上述第二个例子中的第一个函数的最后一个参数改为缺省参数,此时调用f(1,2),编译器直接报错。其实这两个函数在语法上是构成重载的,但是当调用时,只给了两个参数,我们知道缺省参数可以不给,那么此时编译器就不知道调用哪个函数了,就出现了“调用不明确”的错误。

 为什么C++支持函数重载,而C语言不支持

在 C/C++ 中,一个程序要运行起来,需要经历以下几个阶段: 预处理、编译、汇编、链接。 1. 实际我们的项目通常是由多个头文件和多个源文件构成,而通过我们 C 语言阶段学习的编译链接,我们 可以知道,【当前a.cpp 中调用了 b.cpp 中定义的 Add 函数时】,编译后链接前, a.o 的目标文件中没有 Add的函数地址,因为 Add 是在 b.cpp 中定义的,所以 Add 的地址在 b.o 中。那么怎么办呢? 2. 所以链接阶段就是专门处理这种问题, 链接器看到 a.o 调用 Add ,但是没有 Add 的地址,就会到 b.o 的符 号表中找 Add 的地址,然后链接到一起。 3. 那么链接时,面对 Add 函数,连接器会使用哪个名字去找呢?这里每个编译器都有自己的函数名修饰规 则。 4. 由于 Windows 下 vs 的修饰规则过于复杂,而 Linux 下 gcc 的修饰规则简单易懂,下面我们使用了 gcc 演示了这个修饰后的名字。 5. 通过下面我们可以看出 gcc 的函数修饰后名字不变。而 g++ 的函数修饰后变成【 _Z+ 函数长度 + 函数名 + 型首字母】。

一、在Linux环境下采用C语言编译器编译后:函数名字的修饰没有发生改变。

二、采用C++编译器编译后:函数名字的修饰发生改变,编译器将函数参数类型信息添加到修改后的名字中。

通过这里就理解了 C 语言没办法支持重载,因为同名函数没办法区分。而 C++ 是通过函数修饰规则来区 分,只要参数不同,修饰出来的名字就不一样,就支持了重载。

到此这篇关于C++中函数重载详解的文章就介绍到这了,更多相关C++函数重载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++ OpenCV实现像素画的示例代码

    C++ OpenCV实现像素画的示例代码

    这篇文章主要介绍了通过OpenCV进行图片像素的变化,从而形成像素画效果的功能。文中的示例代码讲解详细,感兴趣的小伙伴可以动手试一试
    2022-01-01
  • C++中发送HTTP请求的实现方式

    C++中发送HTTP请求的实现方式

    使用C++编程发送HTTP请求通常需要使用第三方的HTTP库或框架,在C++中,有几个受欢迎的HTTP库可供选择,例如Curl、Boost.Beast和cpp-httplib,另外,也可以自己实现socket来发送http请求,需要的朋友可以参考下
    2024-04-04
  • C语言实现成绩统计示例

    C语言实现成绩统计示例

    这篇文章主要介绍了C语言实现成绩统计示例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C语言按关键字搜索文件夹中文件的方法

    C语言按关键字搜索文件夹中文件的方法

    这篇文章主要介绍了C语言按关键字搜索文件夹中文件的方法,涉及C语言文件操作及字符串查找的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 详解C语言中return与exit的区别

    详解C语言中return与exit的区别

    这篇文章主要介绍了详解C语言中return与exit的区别的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下
    2017-10-10
  • C++实现二分法求连续一元函数根

    C++实现二分法求连续一元函数根

    这篇文章主要为大家详细介绍了C++实现二分法求连续一元函数根,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • C++实现并行计算的两种方式

    C++实现并行计算的两种方式

    本文介绍了使用C++实现并行计算的两种方式,包括OpenMP和MPI,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • Qt音视频开发之利用ffmpeg实现倍速播放

    Qt音视频开发之利用ffmpeg实现倍速播放

    这篇文章主要为大家详细介绍了在Qt音视频开发中如何利用ffmpeg实现倍速播放功能(半倍速/2倍速/4倍速/8倍速),感兴趣的小伙伴可以了解一下
    2022-11-11
  • C++ OpenCV实现物体尺寸测量示例详解

    C++ OpenCV实现物体尺寸测量示例详解

    本文主要介绍了利用OpenCV对物体的尺寸进行测量,即先定位到待测物体的位置,然后测量物体的宽高。感兴趣的同学可以跟随小编一起学习学习
    2022-01-01
  • 详解C语言的exp()函数和ldexp()函数以及frexp()函数

    详解C语言的exp()函数和ldexp()函数以及frexp()函数

    这篇文章主要介绍了详解C语言的exp()函数和ldexp()函数以及frexp()函数,注意这三个函数虽然看起来相似但实际功能却大相径庭!需要的朋友可以参考下
    2015-08-08

最新评论