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

缺省参数,我们先看一下什么是缺省参数

首先,这个是我们的需要传参的函数,这里我们传入 1 然后就输出 a

下面我们就看一下缺省参数

 

我们现在看main函数里面调用fun函数,这里会输出多少呢?

OK 这里我们分别输出了0 和 1

这里的fun函数我们给了一个缺省值 0 ,所以我们调用这个函数的时候,如果我们给它传了值,这里输出的值就是我们传入的值,如果我们没有传入值的话,就是默认的缺省值

我们在继续看一个

 

那么这里我们会输出多少呢?

 

OK 这里很显然是三个0,因为这里我们一个值都没有传

那 如果是这样呢?

 

我们传入了一个值

这样会输出多少呢?

 

这里我们看到输出了1 0 0 ,我们可以看到骂我们传入的那个值传给了a

 

那么这样传参我们当然也可以想到输出的是多少了

 

那么我们在变一下

我们看下面

 

我们看到,这里的三个参数我们都给了默认的缺省值,这样的我们叫做全缺省,如果我们只给一部分,那么就叫做半缺省,记住半缺省并不是缺省一半,而是缺省一部分

 

所以这样的我们就叫做半缺省,如果是这样的话,我们应该如何传参呢?

这里记住,我们如果是半缺省的话,一定要从右往左缺省

下面我们看一下,我们如何传参

 

这里 ,我们有两个缺省值,所以我们只需要传一个参数,这样我们输出的话,输出的是多少呢?

这里我们输出的是 1 0 0, 我们还是把1 传给了a变量,所以这里我们传参的话是从左往右传,缺省的话,是从右向左缺省

下面我们看一下函数重载 

在C++中,函数名是可以相同的,而C语言中是不可以的,而在C++中,在同一命名空间下,函数名相同,参数不同(类型不同,顺序不同,参数个数不同)就构成函数重载。

下面就介绍一下函数重载

我们看到,我们分别调用了Add函数,一个传了整型,另外一个传入浮点型,我们这里会输出多少呢?

 

我们看到,我们调用了名字相同的函数,得到的参数却不同,这既是函数重载,因为我们传入的参数不同,所哟调用到了不同的函数

那么我们的函数重载如果是这样子还构成函数重载吗?

 

我们其中一个 int 和 int 类型的, 另外一个是int 和double 类型的,这样我们的函数还可以构成重载吗?

 

我们看到还是可以构成重载的,因为这里是函数类型不同

 

 那么我们这样还构成重载吗?

我们还是可以看到,是构成重载的,应为这里是函数的参数顺序不同

那么如果我们的返回值相同还可以构成重载吗?

 

 

我们看到时构成重载的,因为函数重载和返回值没有关系

我们在看一个

 

 

如果时这样我们还构成函数重载吗?

我们可以想一下判断函数是否构成重载的条件(在相同作用域内 函数名相同 函数的参数不同(参数个数不同 参数类型不同 参数顺不同)),我们可以就按到这两个函数构成函数重载

那么如果我们调用这两个函数会右什么问题吗?

 

 

当我们传入 1 的时候我们调用了传入int 的函数

那么如果我们调的时候空参数的呢??

这时候我们看到就出现问题了,为社么呢?

因为,如果我们不传入值的话,我们这个函数时调用哪一个呢?时调用空的呢?还是调用缺省的呢?

所以这时候就出现了二意性

下面我们在看一下引用(&)

在C++中什么时引用呢?

我们下面看

 

 在看引用之前我们先看一下指针,这里我们会输出多少呢?

这里我们都输出了 10 ,那么我们来看一下引用

 

我们这样就是引用,使用了‘&’符号

那么我们这样会输出多少呢?

 

还都是 10 ,这里引用和指针的区别时什么呢?

如果我们向修改 a 的值我们用引用和指针分别怎么操作呢? 我们继续看一下 

这里我们来看一下

 

这里我们都对a 进行了修改,我们看到如果我们向修改 a 的话,我们可以直接对引用进行修改,而我们想要用指针修改的话,我们时需要先解引用,在修改的,所以我们就可以把 b 直接理解为是 a而引用也就是“取别名”。

那么他们还有什么区别呢?

 

这里的 b = x 是对b这个引用进行赋值还是,修改引用指向呢?

 

这里我们可以看到,我们把 x 给了b,如果这里是改变引用的指向的话,&b就和&x是相同的,否则就是和&a相同

 

我们看到它是和&a相同的 所以这里就是把x的值给给b,所以这里我们也可以确认,引用时不可以改变指向的

这就是今天要讲的内容 

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

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

相关文章

【2023】cookie是什么?有什么用?一篇文章彻底搞懂cookie

一个不大不小的问题 假设服务器有一个接口,通过请求这个接口,可以添加一个管理员 但是,不是任何人都有权力做这种操作的 那么服务器如何知道请求接口的人是有权力的呢? 答案是:只有登录过的管理员才能做这种操作 …

SpringCloud之OpenFeign介绍案例+相关面试题

概述 OpenFeign是一个声明式的WEB服务客户端,它使WEB服务客户端变得更加容易。具有可插拔的注解支持,SpringCloud中添加了SpringMVC注解的支持。SpringCloud中集成了Ribbon和Eureka,以及SpringCloud LoadBalance,以便在使用Feign时…

pyest+appium实现APP自动化测试,思路全总结在这里

目录 01、appium环境搭建 2、搭建pythonpytestappium环境 3、安装pycharm搭建项目编写脚本 4、执行测试 绵薄之力 01、appium环境搭建 安装nodejs http://nodejs.cn/ 为什么要安装nodejs? 因为appium这个工具的服务端是由nodejs语言开发的 安装jdk&#xf…

mysql数据库简介

1.什么是数据库:数据仓库。访问必须只能用SQL语句来访问。数据库也是一个文件的系统。 2.数据库的作用:存储数据的作用。开发任何的应用,都有数据库。 3.关系型的数据库:数据库中保存的都是实体与实体之间的关系。 4.常见的数据库…

2023接口自动化测试,完整入门篇

1. 什么是接口测试 顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主…

stata绘图指令

stata绘图指令 – 潘登同学的stata笔记 文章目录 stata绘图指令 -- 潘登同学的stata笔记 绘图概览韦恩图折线图连线图线性拟合图直方图 函数图添加特殊字符和文字 绘图概览 Stata 提供的图形种类: twoway 二维图scatter 散点图line 折线图area 区域图lfit 线性拟合…

基于单片机的温室大棚环境监测系统设计

温室大棚对北方反季节蔬菜的种植具有重要意义。据了解全国各地温室大棚使用集中,但是大棚环境调控方式落后、管理落后、生产效率比较低。针对此问题本文提出了一种基于STM32单片机智能温室大棚控制系统方案,实现环境参数的自动检测,以达到智能…

2023年股票代持行业研究报告

第一章 股票代持概述 1.1 基本概念 股票代持,或称委托持股,是指实际出资人与名义出资人达成以下约定:名义出资人作为名义股东,在股东名册等公司工商登记信息上出现,而实际上由实际出资人出资并享有投资权益。 股票代…

Segment Anything论文详解(SAM)

论文名称:Segment Anything 论文地址:https://arxiv.org/abs/2304.02643 开源地址:https://github.com/facebookresearch/segment-anything demo地址:Segment Anything | Meta AI 主要贡献:开发一个可提示的图像分…

图片存储方案-七牛云存储

1.引语 在实际开发中,我们会有很多处理不同功能的服务器。例如: 应用服务器:负责部署我们的应用 数据库服务器:运行我们的数据库 文件服务器:负责存储用户上传文件的服务器 分服务器处理的目的是让服务器各司其职…

设计模式简述

设计模式(简述) 设计模式的分类 ​ 根据目的可以分为创建型、结构性和行为型三类: 创建型模型:创建对象结构性模型:处理类或对象的组合行为型模式:用于描述对类或对象怎样交互和怎么分派职责 ​ 根据范围可以分为类模式和对象…

nvm-windows的安装使用及踩坑指南

nvm是node的一款版本管理工具,可以简单操作node版本的切换、安装、查看。常规来说,开发中安装一个node版本就够了,但是最近在开发中有的老项目或者一些特定的项目需要来回切换node的版本,不可能手动去卸载掉之前的node版本&#x…

013:Mapbox GL添加marker

第013个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中添加marker。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共70行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xiaozhu…

算法时间复杂度计算

目录 1.时间复杂度计算 1.1 时间复杂度例题 1.1.1例题 1.1.2例题 1.1.3例题 1.1.4例题 1.2时间复杂度leetcode例题 1.时间复杂度计算 首先,我们需要了解时间复杂度是什么:算法的时间复杂度是指算法在编写成可执行程序后,运行时需要耗费…

使用 Floyd Warshall 检测负循环

我们得到了一个有向图。我们需要计算图形是否有负循环。负循环是循环的总和为负的循环。 在图形的各种应用中都可以找到负权重。例如,如果我们沿着这条路走,我们可能会得到一些好处,而不是为一条路付出代价。 例子:

Linux中的read/write和recv/send的区别,并使用recv/send实现简单的聊天功能

Linux中的read/write和recv/send的区别 r e a d / w r i t e read/write read/write的用法 r e c v / s e n d recv/send recv/send的用法 L i n u x Linux Linux中的 r e a d / w r i t e read/write read/write和 r e c v / s e n d recv/send recv/send的区别下面是一个使用…

Three.js教程:第一个3D场景

推荐:将 NSDT场景编辑器加入你3D工具链 其他工具系列: NSDT简石数字孪生 下面的代码完整展示了通过three.js引擎创建的一个三维场景,在场景中绘制并渲染了一个立方体的效果,为了大家更好的宏观了解three.js引擎, 尽量使…

基于SpringBoot的私人健身和教练的预约管理系统源码数据库论文

目 录 第一章 概述 1.1研究背景 1.2开发意义 1.3研究现状 1.4研究内容 1.5论文结构 第二章 开发技术介绍 2.1系统开发平台 2.2平台开发相关技术 2.2.1 Javar技术 2.2.2 Mysql数据库介绍 2.2.3 Mysql环境配置 2.2.4 B/S架构 2.2.5 Springboot框架 …

设计模式-结构型模式之外观模式

4. 外观模式 4.1. 模式定义 外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个 高层接口,这个接口使得这一子系统更加容易使用。外观模…

socket 到底是个啥

哈喽大家好,我是咸鱼 我相信大家在面试过程中或多或少都会被问到这样一个问题:你能解释一下什么是 socket 吗 我记得我当初的回答很是浅显:socket 也叫套接字,用来负责不同主机程序之间的网络通信连接,socket 的表现…
最新文章