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);//系统会自动调用第一个funcfunc(2.5, 3.5);//系统会自动调用第二个funcreturn 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、函数返回值不同能否构成函数重载

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

        具体示意图如下:

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

结语:

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

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

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

相关文章

AI大规模专题报告:大规模语言模型从理论到实践

今天分享的AI系列深度研究报告&#xff1a;《AI大规模专题报告&#xff1a;大规模语言模型从理论到实践》。 &#xff08;报告出品方&#xff1a;光大证券&#xff09; 报告共计&#xff1a;25页 大规模语言模型基本概念 语言是人类与其他动物最重要的区别&#xff0c;而人类…

深入理解 Promise:前端异步编程的核心概念

深入理解 Promise&#xff1a;前端异步编程的核心概念 本文将帮助您深入理解 Promise&#xff0c;这是前端异步编程的核心概念。通过详细介绍 Promise 的工作原理、常见用法和实际示例&#xff0c;您将学会如何优雅地处理异步操作&#xff0c;并解决回调地狱问题。 异步编程和…

Linux的硬盘管理

本章主要介绍Linux磁盘管理 了解分区的概念对硬盘进行分区swap分区的管理 新的硬盘首先需要对其进行分区和格式化&#xff0c;下面来了解一下硬盘的结构&#xff0c;如图 硬盘的磁盘上有一个个圈&#xff0c;每两个圈组成一个磁道。从中间往外发射线&#xff0c;把每个磁道分…

springboot3远程调用

RPC 两个服务器之间的调用 远程请求 内部服务之间的调用 可以通过 cloud 注册中心 openfeign等 外部服务的调用 http请求 外部协议 api:远程接口 sdk&#xff1a;本地调用 调用阿里云的天气请求

深度学习|词嵌入的演变

文本嵌入&#xff0c;也称为词嵌入&#xff0c;是文本数据的高维、密集向量表示&#xff0c;可以测量不同文本之间的语义和句法相似性。它们通常是通过在大量文本数据上训练 Word2Vec、GloVe 或 BERT 等机器学习模型来创建的。这些模型能够捕获单词和短语之间的复杂关系&#x…

【开源】基于Vue+SpringBoot的陕西非物质文化遗产网站

文末获取源码&#xff0c;项目编号&#xff1a; S 065 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S065。} 文末获取源码&#xff0c;项目编号&#xff1a;S065。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与…

案例064:基于微信小程序的考研论坛设计

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

正则表达式(7):转义符

正则表达式&#xff08;7&#xff09;&#xff1a;正则表达式&#xff08;5&#xff09;&#xff1a;转义符 本博文转载自 此处&#xff0c;我们来认识一个常用符号&#xff0c;它就是反斜杠 “\” 反斜杠有什么作用呢&#xff1f;先不着急解释&#xff0c;先来看个小例子。 …

CGAL的3D简单网格数据结构

由具有多个曲面面片的多面体曲面生成的多域四面体网格。将显示完整的三角剖分&#xff0c;包括属于或不属于网格复合体、曲面面片和特征边的单元。 1、网格复合体、 此软件包致力于三维单纯形网格数据结构的表示。 一个3D单纯形复杂体由点、线段、三角形、四面体及其相应的组合…

从零开始搭建链上dex自动化价差套利程序(13)

优化 优化触发条件&#xff1a; 之前的触发条件有问题&#xff0c;导致迟迟不能触发&#xff0c;优化后触发条件如下&#xff1a; dydx_take 0.0002apex_make 0.0005​float(b_first_price_apex)-float(s_first_price_dydx) > float(b_first_price_apex)*apex_makefloat…

华为数通---配置Smart Link主备备份示例

定义 Smart Link&#xff0c;又叫做备份链路。一个Smart Link由两个接口组成&#xff0c;其中一个接口作为另一个的备份。Smart Link常用于双上行组网&#xff0c;提供可靠高效的备份和快速的切换机制。 目的 下游设备连接到上游设备&#xff0c;当使用单上行方式时&…

Microsoft 365 Copilot正式上线,如何稳定访问体验?

如果将微软对人工智能的投资看成一场豪赌&#xff0c;Microsoft Copilot无疑是现阶段最受瞩目的赌注。2023年9月正式发布的Microsoft Copilot是一种基于大型语言模型&#xff08;LLM&#xff09;和微软图形&#xff08;Microsoft Graph&#xff09;的数据和人工智能&#xff08…

贝锐花生壳3大安全能力,保障网络服务安全远程连接

在没有公网IP的情况下&#xff0c;使用内网穿透工具&#xff0c;将本地局域网服务映射至外网&#xff0c;虽然高效快捷&#xff0c;但信息安全也是不可忽略的方面。 对此&#xff0c;贝锐花生壳提供了多维度的安全防护能力&#xff0c;满足不同场景下用户安全远程访问内网服务的…

阿里巴巴通义实验室周畅:让大模型率先在PC上“跑起来”

12月7日&#xff0c;以“AI新生态 智启新元年”为主题的首届AI PC产业创新论坛在北京联想集团总部举办。阿里巴巴-通义实验室、通义千问大模型负责人周畅受邀出席分享关于端侧大模型的技术进展&#xff0c;以及终端设备与AI结合的发展前景。 周畅表示&#xff0c;大模型技术的…

Python django-xadmin:构建强大的 Django 后台管理系统

概要 Django作为一款强大的Web框架&#xff0c;其后台管理系统提供了便捷的数据管理和操作方式。而 django-xadmin 则为Django的后台管理系统提供了更加强大的功能和灵活的定制选项。在本文中&#xff0c;我们将深入研究如何使用django-xadmin&#xff0c;并通过详细的示例代码…

企业博客SEO:优化SOP,助您提升搜索引擎可见性

企业博客是互联网时代企业与用户沟通的重要渠道之一&#xff0c;引流成本也比较低。然而&#xff0c;依然有企业会处在3种状态&#xff1a; 1. 有博客&#xff0c;但内容更新不积极或搁置 2. 有博客&#xff0c;但内容散乱 3. 根本就没有博客 如果是这几种状态&#xff0c;…

Java网络编程-深入理解BIO、NIO

深入理解BIO与NIO BIO BIO 为 Blocked-IO&#xff08;阻塞 IO&#xff09;&#xff0c;在 JDK1.4 之前建立网络连接时&#xff0c;只能使用 BIO 使用 BIO 时&#xff0c;服务端会对客户端的每个请求都建立一个线程进行处理&#xff0c;客户端向服务端发送请求后&#xff0c;…

3接上篇 我的自定义GPTs的改进优化 与物理世界连接成功 GPTs的创建与使用定义和执行特定任务的功能模块 通过API与外部系统或服务的交互

https://blog.csdn.net/chenhao0568/article/details/134875067?spm1001.2014.3001.5502 从服务器日志里看到请求多了一个“location” 23.102.140.123 - - [08/Dec/2023:14:02:20 0800] "GET /getWeather.php?location&locationNewYork HTTP/1.1" 200 337 &…

2024年甘肃省职业院校技能大赛信息安全管理与评估赛项一阶段样题一

2024年甘肃省职业院校技能大赛高职学生组电子与信息大类信息安全管理与评估赛项样题一 竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防…

【K8S】微服务不香了?单体化改造悄然兴起!!

微服务一直以来是服务治理的基本盘之一,落地到云原生上,往往是每个 K8s pods 部署一个服务,独立迭代、独立运维。 但是在快速部署的时候,有时候,我们可能需要一些宏服务的优势。有没有一种方法,能够 “既要又要” 呢?本文基于 tRPC-Go 服务,提出并最终实践了一种经验证…