C++_函数重载

        前言:

        函数重载的意思就是可以有多个同名函数存在,但是这些同名函数的参数列表有着不同情形,以便区分。在C++中,支持在同一作用域下可以声明、定义多个同名函数,但是这些函数的形参类型,类型顺序以及参数个数三者中至少有一个是有区别的。

1、情形一:参数类型不同

        既同名函数的形参类型不能相同,代码如下:

#include<iostream>
using namespace std;

//定义两个func同名函数
void func(int x, int y)
{
	cout << "func(int x, int y)" << endl;//打印函数
}

void func(double x, double y)
{
	cout << "func(double x, double y)" << endl;//打印函数
}

int main()
{
    //调用这两个函数
	func(2, 3);//系统会自动调用第一个func
	func(2.5, 3.5);//系统会自动调用第二个func
	return 0;
}

        运行结果:

        从结果中可以看出,系统会自动识别并调用一个形参类型最为接近的实参类型的函数,尽管有多个和该函数重名的函数,系统也不会报错。

2、情形二:参数个数不同 

        既同名函数的形参类型可以相同,但是要在形参的个数上有所区分。代码如下:

#include<iostream>
using namespace std;

void func(int x, int y)
{
	cout << "func(int x, int y)" << endl;//打印函数
}

void func(int x)
{
	cout << "func(int x)" << endl;//打印函数
}

int main()
{
	func(2);

	return 0;
}

        运行结果:

        从结果中可以看出,编译器同样会根据形参个数的不同去调用我们期望调用的函数。

3、情形三:参数类型的顺序不同

        注意这里指的顺序不同是指第一个形参类型与第二个形参类型的前后顺序,并不是形参名称顺序不同,代码如下:

#include<iostream>
using namespace std;

void func(int x, char y)
{
	cout << "func(int x, char y)" << endl;//打印函数
}

void func(char x, int y)
{
	cout << "func(char x, int y)" << endl;//打印函数
}

int main()
{
    //调用
	func(2, 'a');
	func('b',3);

	return 0;
}

        运行结果:

        从结果中可以看出,即使同名函数的形参个数和形参类型都相同,只要他们形参类型的顺序不同编译器也可以精确调用。

4、函数返回值不同能否构成函数重载

        上文说到了在三个情形下都能构成函数重载,那么如果函数的返回类型不相同按理来说也可以对同名函数进行区分,但是实际上仅仅通过对返回类型的区分是不能够判断是否为函数重载。原因在于编译器在编译完成后会对原本的函数名进行修饰,是根据函数形参、实参的逻辑进行分析然后修饰。然而函数调用的代码是不涉及返回类型的区分,因此修饰的时候不参考函数的返回类型。所以不能通过区分返回类型来构建函数重载。

        具体示意图如下:

        可以从上图看到,编译器之所以可以区分同名函数,是根据函数的形参、实参进行分析,从而对函数名进行修饰。如果只看调用函数的代码,是看不出要调用函数的返回类型,就无法进行调用函数与定义函数的区分,因此返回类型不被作为修饰参考。

结语:

        以上就是关于函数重载的讲解,希望本文可以给你带来更多的收获,如果本文对你起到了帮助,希望可以动动小指头帮忙点赞👍+关注😎+收藏👌!如果有遗漏或者有误的地方欢迎大家在评论区补充~!!谢谢大家!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

海底数据中心:数据存储未来发展的新方向

随着信息技术的快速发展&#xff0c;数据需求量呈指数级增长&#xff0c;数据中心作为数据处理和存储的重要基础设施&#xff0c;其地位和作用愈发凸显。然而&#xff0c;传统的数据中心由于能耗大、碳排放高、土地占用等问题&#xff0c;已经难以满足可持续发展的需求。在此背…

惊喜!C++ 现代化json库nlohmann更高效的使用方式

背景 nlohmann 这个库其实早在2019年项目中已经开始使用了&#xff0c;没有问题&#xff0c;这些库一般都不会进行升级。 最近在新的项目中也需要用Json解析&#xff0c;然后再去它的官网上过了一遍ReadMe,发现了一些提高效率的新功能。 链接&#xff1a;https://github.com/…

人工智能导论习题集(1)

第二章&#xff1a;知识表示 题1题2题3题4题5 题1 题2 题3 题4 题5

bug-ku--计算器

F12 maxlength"1" 限制的是你能输入几位数 改成3就行 来那个数相相加就能输入了 flag{464f5f406e7e182014500fc49f7aedfc}

C++共享和保护——(1)作用域

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 人生就像骑单车&#xff0c;要想平衡就…

单元测试、系统测试、集成测试三者的区别是什么?

实际的测试工作当中&#xff0c;我们会从不同的角度对软件测试的活动进行分类&#xff0c;“单元测试&#xff0c;集成测试&#xff0c;系统测试”&#xff0c;是按照开发阶段进行测试活动的划分。这种划分完整的分类&#xff0c;其实是分为四种“单元测试&#xff0c;集成测试…

2023年最新prometheus + grafana搭建和使用+gmail邮箱告警配置

一、安装prometheus 1.1 安装 prometheus官网下载地址 sudo -i mkdir -p /opt/prometheus #移动解压后的文件名到/opt/,并改名prometheus mv prometheus-2.45 /opt/prometheus/ #创建一个专门的prometheus用户&#xff1a; -M 不创建家目录&#xff0c; -s 不让登录 useradd…

ros的slam建图和导航(含工作空间)

工作空间的结构 准备工作 创建工作空间&#xff08;ros_zy&#xff09; mkdir ros_zy进入工作空间 cd ros_zy创建src文件夹&#xff08;放源程序&#xff09; mkdir src编译工作空间 catkin_make打开vscode&#xff08;从终端打开此工程&#xff09; code .进入工作空间的…

React系列:实现子组件A->父组件-子组件B变量流传

🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家,51CTO明日之星 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥网站:vip.zsqt.cc React系列总结 🎈useState的使用 创建响应式变量的时候,在react是需要使用u…

智能监控平台/视频共享融合系统EasyCVR接入大华SDK后只有一路通道可云台控制该如何解决?

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

算法___

文章目录 算法两数之和两数相加 算法 两数之和 题目如下图&#xff1a; 我的答案如下图&#xff1a; 我采用的是最笨的思路&#xff0c;直接暴力的两次循环&#xff0c;第一次外循环是取数组的第一个元素&#xff0c;然后内循环会遍历数组后面除第一个的所有元素&#xff0…

LLM之RAG理论(一)| CoN:腾讯提出笔记链(CHAIN-OF-NOTE)来提高检索增强模型(RAG)的透明度

论文地址&#xff1a;https://arxiv.org/pdf/2311.09210.pdf 检索增强语言模型&#xff08;RALM&#xff09;已成为自然语言处理中一种强大的新范式。通过将大型预训练语言模型与外部知识检索相结合&#xff0c;RALM可以减少事实错误和幻觉&#xff0c;同时注入最新知识。然而&…

【上海大学数字逻辑实验报告】六、时序电路

一、 实验目的 掌握同步二进制计数器和移位寄存器的原理。学会用分立元件构成2位同步二进制加计数器。学会在Quartus II上设计单向移位寄存器。学会在Quartus II上设计环形计数器。 二、 实验原理 同步计数器是指计数器中的各触发器的时钟脉冲输入端连接在一起&#xff0c;接…

【lesson12】表的约束(5)

文章目录 表的约束的介绍外键约束测试建表插入测试建表插入测试 理解外键约束 表的约束的介绍 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性。…

SpringIOC之ConditionEvaluator

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

C语言--与||符号介绍与短路现象

一.&&且 表达式1&&表达式2&#xff1a;表达式1为真并且表达式2为真&#xff0c;整体表达式才为真&#xff0c;其它为假。 注意短路现象&#xff1a;&#xff08;假&&假->假&#xff09;&#xff08;假&&真->假&#xff09;&#xff0c;如…

GeoPandas实操:读取数据

GeoPandas 支持读取和写入多种地理空间数据格式&#xff0c;如 ESRI Shapefile、GeoJSON、GeoPackage 等&#xff0c;以及与其他 GIS 软件兼容的格式。 1. 读取数据 1.1. 读取ESRI Shapefile数据 ESRI Shapefile&#xff08;简称 Shapefile 或 .shp 文件&#xff09;是一种常…

vue实现移动端适配

目录 1. 使用vw单位&#xff1a;vw是视窗宽度的百分比&#xff0c;可以根据不同设备的屏幕宽度来进行自适应。在Vue中可以通过设置全局CSS样式&#xff0c;将所有的尺寸单位改为vw。 2. 使用Flexible.js&#xff1a;Flexible.js是一个用于淘宝移动端适配的库&#xff0c;可以…

【lesson11】表的约束(4)

文章目录 表的约束的介绍唯一键约束测试建表插入测试建表插入测试建表插入测试修改表插入测试 表的约束的介绍 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保…

实验7:索引和视图定义

【实验目的】 1、了解索引和视图的含义 2、熟悉索引和视图的创建规则 3、掌握索引和视图的创建和管理 【实验设备及器材】 1、硬件&#xff1a;PC机&#xff1b; 2、软件&#xff1a;(1)Windows7; (2)Microsoft SQL Server 2012。 【主要内容】 索引的创建、删除、重建…