c++初阶学习----入门(下)

        承接上篇,我们在上一篇博客中提及过,我们c++入门还有一些。这一篇博客会着重写重载和引用。当然还会有一些其他的知识点。但是大家主要是需要了解这两个重点。好,那么我们马上来讲讲今天的主题。

引用

引用的含义

        好我们还是先看含义引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间, 它和它引⽤的变量共⽤同⼀块内存空间。大家看这个应该很好理解的吧。就是可以简单理解为取外号。我们都知道取外号嘛。又不是换了个名字就变成了另外一个人了嘛。意思好理解。那么就实践使用一下。

引用的用法

        首先咧,引用的基本模式是这个样子的:类型& 引⽤别名 = 引⽤对象;这个还是比较形象的吧。只是大家可以会觉得比较混乱就是这个&。在c语言中不是取地址的意思嘛。你这个c++这里突然改变了一下。一时间还不好反应过来咧。这里咧就涉及到了我们下一个要将的知识点“重载”。那么因为后面要讲。这里就不说那么多了。

引用的特性

        与其说说是引用的特性我觉得更加确切的说成引用的规定。我们知道世界都是在一条条规定下井然有序的。如果没有规矩的约束那么世界的秩序就乱了。那么引用的特性有那行咧。具体有三个:引⽤在定义时必须初始化

⼀个变量可以有多个引⽤
引⽤⼀旦引⽤⼀个实体,再不能引⽤其他实体
       那具体引用的特性如何表现出来我们接下来有代码来具体说明一下:

        上面我们写了特性中的两个。一个就是我们引用必须初始化 。具体啥意思咧。就是我们引用的时候我们的引用值可以不初始化,只要能满足后续的要求都无所谓。但是我,类型& 引⽤别名 = 引⽤对象中的引用对象不能没有。如果没有的话就会报错。第二个一个变量可以多个引用。这里就是我们图片中y与b都是引用的我们的a。这里我们只是取了两个“外号”嘛。但是如果后面需要还可以依据自己的需要再取。第三个引⽤⼀旦引⽤⼀个实体,再不能引⽤其他实体。这也好理解啊。大家可以简答理解为如果你没结婚你可以有很多个女朋友。但是当你结婚了以后,你就只能一心一意的对你的伴偶好。这个解释通俗易懂吧。

引用的使用

        好了,理论基础打好了,那么接下来我们就用代码来具体使用一下。但在使用前我们想想引用大概率会用在什么地方法咧。不可能每次使用都像我们上面的那个样子简简单单的使用吧。肯定有些大佬会想出更改有用的玩法。那么一般引用会用在哪些方面咧:引⽤在实践中主要是于引⽤传参和引⽤做返回值中减少拷⻉提⾼效率和改变引⽤对象时同时改变被引⽤对象。这样讲还是比较抽象的那么我们具体举几个例子,比如引用改变原值,引用做参数,引用做返回值等。我们接下来也主要以这三个方面来举例子:改变原来的值很简单,上面的图片其实就已经是这样的了。

         大家看上面的图片,我们原本的a值为10,但是经过b=c后,a的值就改变了。我们也可以清楚的看到我们并没用直接改变a的值,而是改变了a的引用。这就表明了我们前面讲的的引用只是取了个“外号”。东西还是那个东西只是多久一个名字而已。

        引用做参数:写法还是很简单的,其实也可以和c语言中的那个传参。然后子函数的参数名字无所谓的。大家可以融会贯通一下。区别是c语言中形参不能改变实参。但是c++中的引用可以改变实参。个人觉得确实要比C语言中的要好用一些:

       我们可以看到a的值再一次的改变了。由10->20->30。那么我们康康a的“外号”有哪些了。b,y,h。现在a除了叫a以外还有三个名字。这里大家应该知道引用做参数的使用方法了吧。

        引用做返回值 :对于返回值也是很简单的。其实大家如果不看我这里的解释的话,自己思考一下。引用除了基本的那个用法,大家都可以猜的七七八八的。对于引用做返回值的话我们直接来看看:

        返回值嘛。就是我们需要返回的是是引用而已。但是咧我们不能只是在子函数里面引用一下就可以了。我们还要在参数的时候也要引用,不然的话,子函数的参数就只会是一个形参,而不是引用了。因为我们说过c++包含c'语言嘛。那么不满足c++那么系统会自动认为是c语言的。

补充引用并不是简单的只能用在子函数里面指针也是可以的。因为c++包容c语言所以有些时候大家可以会看到下面的代码。那时正常的,以前觉得奇怪的因为我们还没学引用,但是当我们学习了这部分知识后,可不敢再不认识了:

重载

重载的含义

       关于重载的含义我们先看看比较官方的解释是什么样子的:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。这个解释我觉得还是比较有用的,因为我们可以看到解释中写道有几个功能类似的同名函数。最主要的是什么,同名啊。我们想想我们在c语言的时候,有时候写过代码还要想想这个名字可以不,会不会冲突啊。是吧,但是c++就不一样了。那么具体是个什么不一样。接下里我们就看看。

重载的不同

       而说重载重要吧,主要是后面对我们的使用很有帮助,毕竟重载我们还使用了c++中的自动区分参数类型的。那么c++中如果名字相同系统和我们如何区分我们使用的是哪个代码咧:

      参数类型的不同 :大家看到了吧。上面的图片我们是名字一样的。区别是什么,我们代码所接收的参数不一样。当然还有朋友说。你这里数据类型不也不一样嘛。一个是int一个的double。是我们这里看确实能一眼看出来这个区别。但是我们在使用的时候我们能看出来嘛。我们使用的时候看不见源代码,我们能知道这个数据类型不一样嘛。所以这里大家只需要知道可以依据参数的类型不同可以区分我们使用的是哪个代码。

     参数的个数不同  :接下来的这个就更加简单了。依据参数的个数不同。我们想想如果有两个重载函数,然后一个参数需要1个另外一个不需要参数。那么我们使用的时候传了一个参数,那么你会选哪个函数。是吧。这个应该是很好理解的。

        参数的顺序不同:我们都可以猜到,要是想区分是哪个函数,只能在开头下功夫,那么我们。除了上面的两种区分还剩什么咧。当然是我们的小标题,看参数的顺序了。是不是也很简单啊。我们在传递过来的时候,系统判断我们的参数顺序,然后区分是哪个函数:

:区分重载函数只能在开头区分,返回值不能区分也就是我们前面第一个例子中的int与double。不能作为区分依据。还有就是我们在参数个数不同的时候。假如一个参数都没有,那么我们在主函数的时候就要写()。不然的话系统是会报错的。因为你不写()的话,系统哪知道你是想表达没有参数还是有参数但是忘了写咧,就像下面的样子: 

 const

        接下来我们介绍的是我们相当于日常中的限制词。当我们用这个const限制应该对象后。我们的这个对象就只能读不能改变。也就是说当被const修饰后,该对象就只能看不能动了。虽然大家在前期的使用比较少。但是我们的祖师爷设计出来肯定有它存在的意义。毕竟存在即合理嘛。那么接下里就是使用方法了:

       如果只是讲const的基本使用方法的话感觉有点挫,所以我们来看特殊案例。 然后大家就是需要注意的就是。只要被const修饰过后,就不能改变,类型也不能改变,就只能读。希望大家主页。

内联函数

        什么是内联函数列:⽤inline修饰的函数叫做内联函数,编译时C++编译器会在调⽤的地⽅展开内联函数,这样调⽤内联函数就需要建⽴栈帧了,就可以提⾼效率。但是我们在vs的debug版本下⾯默认是不展开inline的,这样⽅便调试,debug版本想展开需要设置⼀下以下两个地⽅:

        大家依据上面的操作就可以打开 inline了。但是对于inline有一个很好玩的地方就是,我们就算是写了inline但是编译器如果觉得你这个不好的话,是不会展开的。就是展不展开看编译器心情。

   然后就是这个大家了解一下吧。因为这个可能会用到一点单片机的编程知识。我对这些是一点都不知道的,所以我也没办法给大家讲太多,所以大家在我这了解有这么一个指令就可以了。      

nullptr

        nullptr 看样子大家就知道有点像我们c语言中的null。并且NULL实际是⼀个宏,在传统的C头⽂件(stddef.h)中,但是在C++11中引⼊nullptr,nullptr是⼀个特殊的关键字,nullptr是⼀种特殊类型的字⾯量,它可以转换 成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型,⽽不能被转换为整数类型。那这个如何解释咧。我们来看看下面的图片:

       大家可以看一下上面的图片,就是这个nullptr的大概使用方法了。

总结

      大家对这篇博客主要是了解引用。因为这个确实是很好用。对我们后面的学习与使用也是很有帮助的。后面的知识点也有用。但是大家不必太着急因为我们这里才入门咧。后面还早,所以我们现在以了解为主,不用强逼自己完全熟知它的使用方法。

补充:大家如过对鄙人的实验代码感兴趣的话可以在gitee上面收搜@yang-hong-and-duan。因为这里用的是实验代码,所以我就不发出来了。

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

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

相关文章

【GreenHills】GHS-Servecode的查看和说明

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 在Green Hills客户申请license试用以及正式文件的Servecode编号会有不同,该文档对此进行说明并如何主动查看Servecode,并且说明Servecode的类别,通过Servecode了解客户授权情况。 …

【鸿蒙学习笔记】使用axios进行HTTP数据请求

官方文档:网络管理开发概述 目录标题 访问淘宝公开接口(测试数据)第1步:module.json5 配置网络授权第2步:下载axios第3步:源码第4步:启动模拟器第5步:启动entry第6步:操…

ChIP项目文章CMI(IF=24.1)|IRF1激活可促进辐射诱导的细胞死亡和炎症反应

2024年6月7日,四川大学张舒羽教授团队在Cellular & Molecular Immunology(IF24.1)期刊上发表了题为“Chaperone-and PTM-mediated activation of IRF1 tames radiation-induced cell death and inflammation response”的文章&#xff0c…

专注于国产FPGA芯片研发的异格技术Pre-A+轮融资,博将控股再次投资

近日,苏州异格技术有限公司(以下简称“异格技术”)宣布成功完成数亿元的Pre-A轮融资,由博将控股在参与Pre-A轮投资后,持续投资。这标志着继2022年获得经纬中国、红点中国、红杉中国等机构数亿元天使轮融资后&#xff0…

FastAPI 学习之路(三十四)数据库多表操作

之前我们分享的是基于单个表的数据库表的操作,我们在设计数据库的时候也设计了跨表,我们可以看下数据库的设计 class User(Base):__tablename__ "users"id Column(Integer, primary_keyTrue, indexTrue)email Column(String(10), uniqueTr…

java线程锁synchronized的几种情况

一、对象方法锁 1、成员方法加锁 同一个对象成员方法有3个synchronized修饰的方法,通过睡眠模拟业务操作 public class CaseOne {public synchronized void m1(){try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace()…

【机器学习】朴素贝叶斯算法详解与实战扩展

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 引言 朴素贝叶斯算法是一种基于概率统计的分类方法,它利用贝叶斯定理和特征条件独立假设来预测样本的类别。尽管其假设特征之间相互独立在现实中往往不成立,但朴素贝叶斯分类器因其计算…

vscode单独设置项目的字符集

vscode有个默认的字符集,直接修改这里的话将会修改整个vscode工具的字符集。如果不同的项目使用不同的字符集,就不能修改这个默认的设置了。而是需要针对每个项目进行修改。 修改方法: 使用shiftctrlp进入settings的菜单页面,点击…

Leetcode—236. 二叉树的最近公共祖先【中等】

2024每日刷题(142) Leetcode—236. 二叉树的最近公共祖先 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL…

怎么把便签主面板置顶 便签主面板置顶方法

作为一名经常需要处理大量信息和任务的作家,我发现便签记事真的是我的救星。无论是临时灵感、会议要点还是待办事项,便签都能帮我快速记录,让我不再遗漏任何重要信息。而且,便签的应用场景也非常广泛,无论是在电脑前写…

王道计算机数据结构+插入排序、冒泡排序、希尔排序、快速排序、简单选择排序

本内容是基于王道计算机数据结构的插入排序、冒泡排序、希尔排序、快速排序、简单选择排序整理。 文章目录 插入排序算法性能代码 冒泡排序算法性能代码 希尔排序算法性能代码 快速排序算法性能代码 简单选择排序算法性能代码 插入排序 算法 算法思想:每次将一个…

LLM代理应用实战:构建Plotly数据可视化代理

如果你尝试过像ChatGPT这样的LLM,就会知道它们几乎可以为任何语言或包生成代码。但是仅仅依靠LLM是有局限的。对于数据可视化的问题我们需要提供一下的内容 描述数据:模型本身并不知道数据集的细节,比如列名和行细节。手动提供这些信息可能很麻烦&#…

zigbee笔记:七、zigbee系统电源管理与睡眠唤醒

zigbee的低功耗、近距离无线传输的特点使得其在一众近距离无线传输方案中备受青睐。而zigbee低功耗优势是通过根据不同工况选择运行在不同的运行模式(供电模式)实现的,因此,掌握zigbee的系统电源管理与睡眠唤醒的相关知识&#xf…

发挥储能系统领域优势,海博思创坚定不移推动能源消费革命

随着新发展理念的深入贯彻,我国正全面落实“双碳”目标任务,通过积极转变能源消费方式,大幅提升能源利用效率,实现了以年均约3.3%的能源消费增长支撑了年均超过6%的国民经济增长。这一成就的背后,是我国能源结构的持续…

c#调用c++ dll库报错System.BadImageFormatException

System.BadImageFormatException:“试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)” 1. dll需要选择release模式进行编译 2.选择相同位数,比如x64平台,c#也需要x64 3.不要设置c#不支持的函数供调用 比如: c可以输出到控制台…

昇思学习打卡-16-热门LLM及其他AI应用/K近邻算法实现红酒聚类

文章目录 算法原理距离定义模型构建 算法原理 K近邻算法可以用在分类问题和回归问题上,它的原理如下:要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计出这些样本的类别并…

中职综合布线实训室

一、中职综合布线实训室建设背景 在数字化转型的大潮中,计算机网络技术作为支撑数字中国建设的基石,其重要性不言而喻。面对汹涌而来的数字时代,中等职业学校(简称中职)作为技术技能型人才培养的重要基地,…

如何使用Vger对已经过身份验证的Jupyter实例进行安全检测

关于Vger Vger是一款功能强大的交互式命令行应用程序,广大研究人员可以利用Vger与已经过身验证的Jupyter实例进行交互,并对其执行人工智能或机器学习方面的安全检测操作。 使用场景 1、作为红队研究人员,当我们寻找到了Jupyter凭证之后&…

单例模式的简单理解

单例模式 前言一、单例模式是什么二、单例模式的使用饿汉模式单线程下的懒汉模式多线程下的懒汉模式(优化懒汉模式)加锁 三、总结 前言 设计模式是将一些经典的问题场景进行整合归纳,并提供一些解决方案,相当于一种“套路”。 熟…

政企单位光纤资源高效管理与优化策略

引言 随着信息技术的飞速发展,政企单位对于通信基础设施的管理要求日益提高。然而,传统的管理模式,如Excel表格记录和纸质审批流程,已难以满足当前复杂多变的业务需求。在此背景下,我们实施了光纤管理的数字化转型项目…