【C++入门】你知道为什么C++有函数重载而C语言没有函数重载吗?

news2024/9/28 9:23:26

在这里插入图片描述

👦个人主页:@Weraphael
✍🏻作者简介:目前学习C++和算法
✈️专栏:C++航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨


前言

本章是补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的。

目录

  • 前言
  • 一、函数重载的概念
  • 二、例举重载函数例子
  • 三、**分析为什么C++有函数重载而C语言没有
  • 五、总结

一、函数重载的概念

C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型或者类型顺序)不同返回值没有要求。常用来处理实现功能类似数据类型不同的问题

二、例举重载函数例子

  • 参数类型不同

在这里插入图片描述

周所周知,C语言是不允许出现同名函数;而C++中的函数重载j就可以来处理实现功能类似数据类型不同的问题

  • 参数个数不同

在这里插入图片描述

  • 参数类型顺序不同

在这里插入图片描述

  • 函数的返回值不同

首先函数重载与函数的返回值无关

在这里插入图片描述

  • 函数缺省值不同

在这里插入图片描述

首先以上代码是一个重载函数,只是函数func()的调用存在歧义。因为func()可以调用void func(),也可以调用缺省参数void func(int a = 1),对于缺省参数,如果没有传参,默认使用缺省参数值。

三、**分析为什么C++有函数重载而C语言没有

为什么c++可以函数重载而c就不可以呢?这就跟函数名修饰规则有关了。

由于vs修饰规则过复杂,而Linux下的gcc、g++编译器的修饰规则简单易懂。因此下面用gcc、g++来演示过程。(gcc是Linux下的c语言编译器,g++是LInux下的c++编译器)

  1. 首先在Linux下编写test.c,其内容如下:
vim test.c

在这里插入图片描述

  1. 首先用gcc来编译test.c文件(gcc是Linux下的C语言编译器)

在这里插入图片描述
果然在我们的预料中,C语言环境下发生了编译错误。接下来我们可以使用objdump(反汇编)来查看目标文件或者可执行的目标文件的构成。为了能让文件编译通过,我们修改文件内容如下:

在这里插入图片描述

紧接着用gcc编译test.c文件,生成了a.out的可执行文件,然后再用objdump -S a.out来查看目标文件或者可执行的目标文件的构成

在这里插入图片描述

如下图所示,C语言的函数名存储是直接转化使用函数名;C语言的格式:就是函数名,转化都是add,两者相同,所以不支持函数重载

在这里插入图片描述

  1. 然后再用g++来编译先前的test.c文件,我们发现是可以编译的过的

在这里插入图片描述

最后,再用objdump -S a.out来查看目标文件或者可执行的目标文件的构成,如下图所示
在这里插入图片描述

所以,在C++中,只要形参列表(参数个数 或 类型 或 顺序) 不同,修饰后的函数名也就不同。那么在链接时,就不会因名字冲突而找不到对应地址。因此,C++是支持函数重载的

五、总结

  1. 函数重载需要满足参数个数、类型或者类型顺序不同,注意:其返回值没有要求。
  2. C语言不支持就是因为直接转化函数名,C++支持是因为函数名修饰规则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《最强Android书 架构大剖析》读书笔记

文章目录 第一章 Android 体系结构的变革之路1.2 Android系统源码目录与Linux的异同Android的框架原生二进制可执行文件Android 的原生库核心(core)库用以支持框架的库硬件抽象层Linux内核不带上层 UI界面的Android 第二章 Android 的分区和文件系统2.1 分区架构实验:从设备中获…

ffmpeg学习日记513-源码-configure_filtergraph()函数分析及功能

Date: 12/04/2023 Hours: Details:template_tags 文章目录 源码版本实现文件函数原型参数释义函数功能函数分析filtergraph_is_simple函数 总结参考 源码版本 ffmpeg-4.1.10 实现文件 fftools/ffmpeg_filter.c 函数原型 int configure_filtergraph(FilterGraph *fg)参数释…

重识三只松鼠:“二次创业”的新变革,“深蹲起跳”的新动能

“羚羊明白它必须跑得比狮子快,不然它会被狮子吃掉;每天早晨狮子醒来,狮子也明白它必须赛过跑得最慢的羚羊,不然它会活活饿死。不论你是狮子还是羚羊,都不重要……重要的是每天旭日东升,你就得开始奔跑&…

突破经典网格特征?AutoFocusFormer: Image Segmentation off the Grid 论文阅读笔记

突破经典网格特征?AutoFocusFormer: Image Segmentation off the Grid 论文阅读笔记 一、Abstract二、引言三、相关工作视觉 Transformer Backbones基于聚类的注意力自适应下采样点云网络 四、方法4.1 聚类和区域4.1.1 平衡聚类4.1.2 聚类的区域 写在前面 这一周赶上…

【五一创作】Visual Studio常用调试技巧的温习

当你在编写C程序时,难免会遇到代码出现错误的情况。这时候就需要用调试工具来定位问题并解决它。以下是一些在Visual Studio中使用调试器时常用的技巧,权当作温故总结罢~ 1. 断点 断点是调试中最为基本但也最常用的技巧之一。通过在需要定位的代码行上打…

一文搞懂 x64 IA-64 AMD64 Inte64 IA-32e 架构之间的关系

想要搞清楚 x64、IA64、AMD64 指令集之间的关系,就要先了解 Intel 和 AMD 这两家公司在生产处理器上的发展历史。 x86 处理器 1978年 Intel 生产了它的第一款 16bit 处理器8086,之后几款处理器名字也都以86结尾,包括80186,80286&a…

五一长假暴露了电动爹的真面目,而新能源汽车市场似乎也到了转折点

4月份国内市场汽车销量数据已经出炉,同比来说仍然保持了很高的增长,不过环比数据却显示出新能源汽车市场似乎已到了转折点,繁荣期似乎已经结束,淘汰赛开始了。 一、五一长假再次暴露了电动爹的真面目 新能源汽车长途旅行首先就是怕…

部署LVS-DR集群

引言 一、LVS-DR工作原理 LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一 种工作模式。 LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用节点 Director Server 与 …

推荐算法实战项目:DeepFM 原理以及案例实战(附完整 Python 代码)

本文要介绍的是由哈尔滨工业大学联合华为发表论文《DeepFM: A Factorization-Machine based Neural Network for CTR Prediction》中提出的DeepFM模型。其实根据名字可以看出来,此模型包含Deep和FM两个部分。其中Deep部分就是普通的深度神经网络,FM是因子…

【图像处理】墨西哥小波和带通滤波

一、说明 在连续小波的家族当中,埃尔米特小波是个非常特别的存在(应用在连续小波转换称作埃尔米特转换)。Ricker子波计算电动力学的广谱源项。它通常只在美国才会被称作墨西哥帽小波,因为在作为核函数处理2维图像时,形…

推荐算法实战项目:NFM 原理以及案例实战(附完整 Python 代码)

本文要介绍的是由新加坡国立大学的研究人员在论文《Neural Factorization Machines for Sparse Predictive Analytics∗》中提出的NFM模型。 NFM模型全称是Neural Factorization Machines,通过名字也可以看出,这又是一个基于FM模型改进得到的网络。无论…

SpringBoot+vue文件上传下载预览大文件分片上传文件上传进度

文章目录 学习链接上传文件前端后端代码 下载文件a标签下载前端代码后台代码 动态a标签下载前端代码 axios 动态a标签前端代码 浏览器直接输入 预览文件前端代码后端代码 分片上传前后端分别md5加密spark-md5commons-codec 分片上传实现前端代码后端代码 学习链接 Blob &…

zynq基于XDMA实现PCIE X8视频采集卡 提供工程源码和QT上位机程序和技术支持

目录 1、前言2、我已有的PCIE方案3、基于zynq架构的PCIE4、总体设计思路和方案视频输入通路视频输出通路PCIE输出上位机通路 5、vivado工程详解6、SDK 工程详解7、驱动安装8、QT上位机软件9、上板调试验证10、福利:工程代码的获取 1、前言 PCIE(PCI Exp…

智能无人蜂群作战系统适应性进化模型仿真研究

源自:系统仿真学报 作者:李志强, 李元龙, 殷来祥, 马向平 摘 要 智能无人蜂群作战系统主要由有限行为能力的大规模作战个体组成,一般不具备应对复杂战场环境和作战对手变化的适应能力。采用遗传算法与增强学习相结合的方法探索构建基于个体…

Apache Flink (最新版本) 远程代码执行

路虽远&#xff0c;行则将至&#xff1b;事虽难&#xff0c;做则必成 Apache Flink < 1.9.1(最新版本) 远程代码执行 CVE-2020-17518 漏洞描述 近日,有安全研究员公开了一个Apache Flink的任意Jar包上传导致远程代码执行的漏洞. 漏洞影响 Apache Flink < 1.9.1(最新…

通过频谱规划软件摆脱频谱监测硬件限制

背景 随着无线通信技术的发展,电磁频谱被逐渐扩充&#xff0c;从几kHz到1THz的频段慢慢被各种技术填充与覆盖。在任意时刻任意地点&#xff0c;5G、WiFi、GNSS、广播电台、航空通信等&#xff0c;都离不开无线通信。 电磁频谱&#xff08;EMS&#xff09;被广泛用于生活中&am…

基于matlab使用均匀矩形阵列进行电子扫描

一、前言 本示例模拟定期扫描预定义监视区域的相控阵雷达。该单基地雷达使用900元件矩形阵列。介绍了根据规范推导雷达参数的步骤。合成接收到的脉冲后&#xff0c;进行检测和距离估计。最后&#xff0c;利用多普勒估计得到每个目标的速度。 二、雷达定义 首先&#xff0c;我们…

M301H-BYT代工-支持Hi3798 MV300H/MV300/MV310芯片-当贝纯净桌面-强刷卡刷固件包

M301H-BYT代工-支持Hi3798 MV300H&#xff0f;MV300&#xff0f;MV310芯片-当贝纯净桌面-强刷卡刷固件包 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff…

算法学习-图像的数据格式BGR

OpenCV学习——图像的BGR格式解读 1. opencv读取的图片数据格式2. BGR含义 1. opencv读取的图片数据格式 opencv读取的图片数据格式为numpy的nparray格式。 一张二维图片是由像素点构成&#xff0c;如下图所示&#xff1a; 其中行与列确定了像素点的位置&#xff0c;值确定了…

美团企业版:地利尚可,天时不足

配图来自Canva可画 近年来入局B端逐渐成为各家互联网大厂的必然选项&#xff0c;美团自然不甘心落于人后。 4月13日&#xff0c;美团企业版正式上线&#xff0c;面向企业客户推出一站式企业消费管理服务&#xff0c;覆盖团餐、差旅等场景&#xff0c;同时推出“企航计划”&am…