C++重载,缺省参数,引用

news2024/11/24 12:03:18

目录

重载

参数的缺省

引用

 引用总结:


重载

什么是函数的重载呢,在以前学C语言的时候都写过一个Max1的函数,目的就是求出两个数或者多个数的较大值,但它的参数很单一,只能接受一种参数,如果在已有int类型下还需要写一个double类型的Max函数就需要重新命令成Max2,但在c++中引入了函数重载的概念,也就是说,当我们在写一个参数为double类型的函数时同样可以用相同的函数名。但构成不是所有函数都可以构成重载,需要达到重载还需要满足几个条件

一:参数个数不能相同:

二:参数顺序不能相同

三:参数类型不能相同

接下来我们了解一下,编译器是如何找到我们需要的那个函数的呢。这里拿Linux的环境下做举例。我们知道在一个.cpp的文件转换成可执行文件需要经过编译,链接最后转换成可执行文件,在链接期间会有一个符号汇总,例如我们写了一个Max参数为int,int的函数,那么在Linux下就会转换成一个符号为

Z3(3表示函数名长度)Max(函数名)i(参数类型)i(参数类型)

如果参数为double的话同样就会生成一个Z3 Max dd的符号。

为什么说函数的重载不支持返回值不同呢,因为c++可以忽略返回值,因此不知道调用的是哪个函数。

参数的缺省

什么是参数的缺省,比如我们在写一个函数的时候但是没有写参数。

这里我们可以看到当我们不传某个参数的时候也可以在形参类写上我们需要的值。这就是全缺省参数,同样也有半缺省参数,但是值得注意的是半缺省参数需要从右往左边缺省,如果右边有没有缺省就不可以直接缺省左边。

引用

说起来引用和指针的共功能很相似,但是引用实际上就是一个变量的别名,例如水浒传里面的李逵,我叫黑旋风也是他,铁牛也是他,这里我可以通过地址来看一看。

这里我们也确实可以看到 变量a,b,c,d的地址都是一样的,也证明了b,c,d确实是变量a的别名。

但是指针是这个变量的地址,并且引用时不开空间的。

 这里我们可以看到引用和指针实现的功能是一样的,但是指针在使用的时候会有各种解引用,可能还有造成空指针的问题,使用起来很不方便,所以我们的祖师爷当时在使用的时候也觉得这样地址传来传去的很麻烦,索性就把这个变量起一个别名,用别名来实现它。

至于为什么说别名使用起来更高效我们这里可以简单看一下。当我写一个ADD函数的时候,最后返回这两个数的和的时候,编译器不是直接把值返回去,而是会生成一个临时变量

 

 而引用不会生成临时变量。

但是这里值得注意的是,在引用作为参数返回的时候,因为不会生成临时变量 ,所以返回值需要是在堆区或者静态区,因为在函数结束的时候会销毁栈帧,里面的变量同样也会被销毁,所以下次访问到这个值的时候是不确定测。

在引用的过程中,权限是不可以被放大的,但是权限可以平移或者缩小。这里我们举个例子。

权限的扩大

权限的缩小

 

 权限的平移

 还要注意一点,引用在sizeof中为引用类型的大小,但是指针无论什么类型在32为平台下都是4字节64为下都是8字节

 引用总结:

1:引用概念上定义一个变量的别名,指针存储变量地址

2:引用定义时必须初始化,指针没有要求

3:没有NULL引用,有NULL指针

4:引用一个实体后就不能在引用其他实体,但指针可以改变指向

5:在sizeof中引用为类型大小,指针在32为下为4字节,64为下为8字节

6:引用自增+1及实体+1,指针+1实际向后便宜1个类型大小

7:有多级指针但没有多级引用

8:访问实体不同,指针需要解引用,引用是由编译器自己处理

9:引用相对于指针更安全

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

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

相关文章

SNMP Trap的session问题

1、前言 最近遇到了个问题,SNMPv3 Trap上报,在snmp agent侧修改了用户密码,管理站mibbroswer上没有修改trap用户的密码,仍然可接收到trap上报消息。通过Wireshark抓包,(编辑–首选项–Protocols–SNMP–Us…

证照之星7.0下载安装教程及老版本升级说明

随着社会的发展,人们的证件照需求越来越多,很多人为了节省时间和成本,选择自己拍摄证件照,并进行后期制作。而证照之星是一款功能强大的证件照后期制作软件,能够帮助用户对证件照进行快速美化和处理。本文将为大家详细…

【SpringBoot】自从集成spring-security-oauth2后,实现统一认证授权so easy!

文章目录 一.前言1.principal和credential的区别2.生成私钥公钥3.用户认证分析4.认证解决方案4.1.单点登录4.2.第三方账号登录4.3.单token系统和双token系统业务逻辑 二.Spring Security1.快速入门2.基本原理FilterSecurityInterceptorExceptionTranslationFilterUsernamePassw…

Vue3+Three.js+antvG2实战项目 智慧城市(四)

前言 在网上找了很久都没有找到使用Three.js开发智慧城市的免费文章或者免费视频,自己花了一点时间做了一个纯前端的智慧城市项目。 技术栈都是最新的:vue3vitetypeScriptThreeantv G2 源码分享 源码 模型,天空图盒子链接分享(不想下载源码可以只用下这个)提取码1234 20230424_…

在时间序列预测中使用 FRFT

RNN Encoder–Decoder 每一个时刻都有一个隐藏状态向量 S_t,当这个向量传递到最后的一个 token 时,即 S_n (n为输入序列的最大长度),它就是语义编码向量 C C 参与了Decoder过程中每一时刻隐藏状态和输出的计算. 最大的局限性就在于编码和解码…

美国访学J类签证费涨价15%|5月30日生效

2023年5月30日起,美国签证费用开始上调,其中访问学者的J类签证将由160美元调整至185美元,涨价15%。届时美国驻华大使馆将依据汇率做出调整,并公布具体的人民币数额。知识人网小编提醒相关签证人员提前做好准备。 美国国务院发布的…

手撕二叉树(图解+代码)

二叉树 🌳1.树的概念🌳2.二叉树的概念及性质🍎2.1 二叉树的概念🍎2.2 二叉树的性质 🌳3.二叉树的基本操作🍎3.1 二叉树的遍历🍎3.2 获取树中节点的个数🍎3.3 获取叶子节点的个数&…

Python学习5:计算弓形的面积

类型:数值运算 描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ …

大数据学习初级入门教程(十七) —— Elasticsearch 8.7.0 完全分布式集群的安装、配置、启动和测试

好久没用 Elasticsearch 集群了,参考以前写的《大数据学习初级入门教程(八) —— Elasticsearch 7.6.2 单节点的安装、启动和测试_elasticsearch 7.6.2需要专属网络_孟郎郎的博客-CSDN博客》、《大数据学习初级入门教程(九&#x…

面向对象与面向过程的区别

“劳累一天回到家中“ ”对象赶忙问我想吃些什么?“ “望着窗外淅淅沥沥的小雨 蛋炒饭吧” “雨声洗涤了心灵 炒饭温暖了肚子” “我没有问她炒饭是怎么做的,他也没有管我吃相有多难看” “我面向对象,她也面向对象” 面向对象和面向过程的区…

Unity3D:编辑场景模板

场景模板 Inspector 场景模板 Inspector 包含以下部分: Details:指定模板使用哪个场景,并包含模板的描述,该内容将出现在 New Scene 对话框中。Thumbnail:提供用于为模板创建预览图像的选项。Scene Template Pipelin…

ajax的介绍及使用

ajax的介绍 开发流程 前端 ajax:前后端沟通的桥梁 后端 ajax介绍 ajax叫做异步的Javascript和xml ajax通过浏览器与服务器(后端)进行少量数据交互,进行页面异步更新(网页不会重新加载) 优点: 减轻服务器负…

Java基础1

一、标识符 给类、接口、方法、变量等取名时用的字符序列 如: public class 类名-标识符{public static void 方法名-标识符(String[] args){int 变量或标识符 1000;} } 二、标识符的命名规范 组成部分 英文大小写字母、数字字符、美元($)符号、下划线(_)、中文…

「ChatGPT」十分钟学会如何在本地调用API_KEY(最新版 | 附源码)

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

1.2 行列式的性质和计算

学习目标: 当学习行列式性质和计算时,以下是一些具体的学习目标: 理解行列式的定义和计算方法,能够准确计算给定的行列式。(最基本的)熟练掌握行列式的基本性质,包括交换行列式的两行或两列、…

VRP开源的算例资源

VRP开源的算例资源 开源的算例资源 开源的MIP算例网址 1. MISOCP网址 Benchmark instances:多种问题的算例数据 TSP算例网址 VRP标杆算例网址 1. Networking and Emerging Optimization发布的VRP算例 2. PRP算例 3. 一个学者的主页上的算例 4. Chair in L…

Linux学习笔记(3)一些数据类型

1)_u32 是一个无符号的32位整数类型,它在 Linux 内核中定义为 typedef unsigned int __u32。其中,__u32 是为了避免名称冲突而定义的特殊类型。无符号整数是一种表示正整数的数据类型,其取值范围为 0 到 4294967295(2…

docker容器:本地私有仓库、harbor私有仓库部署与管理

目录 一、本地私有仓库 1、本地私有仓库简介 2、搭建本地私有仓库 3、容器重启策略介绍 二、harbor私有仓库部署与管理 1、什么是harbor 2、Harbor的特性 3、Harbor的构成 4、harbor部署及配置 ①部署docker-compose ②部署Harbor服务 ③登录创建项目 ④登录仓库并…

对话到行动:通过行动级生成构建面向任务的对话系统

目录 对话到行动:通过行动级生成构建面向任务的对话系统 1介绍 2框架描述 2.1概述 2.2第一步:对话动作构造 2.3步骤2:响应标准化响应标准化 2.4步骤3:动作序列预测 2.5步骤4:生成响应 3实验 3.1实验设置 3.2主要结果 3.3深度分析 4结论 5主持人简介 6公司简介 对…

V-Ray渲染教程:又快又好的V-Ray渲染参数!

Chaos V-Ray 是适用于大部分主流3D设计软件和CAD程序的3D渲染插件,它可以与 3ds Max、Cinema 4D、Houdini、Maya、Nuke、Revit、Rhino、SketchUp、Unreal 无缝协作。借助 V-Ray渲染器强大的功能,艺术家和设计师可以产生出非常逼真的渲染效果。 那么&…