C++——入门讲解(2)

news2024/12/23 1:10:08

作者:几冬雪来 

时间:2023年4月18日

内容:C++入门内容讲解

目录

前言: 

1.函数重载: 

2.引用: 

3.缺省参数:

结尾:


前言: 

在上一篇博客中我们正式的踏入了对C++板块的学习, 并且讲解了C++的一些基础知识,而今天我们将在原先的基础上进一步对我们的C++的内容进行进一步的说明。 

1.函数重载: 

在C++中有一个关键的操作被我们称为函数重载,那么函数重载是什么意思呢?就有个例子,如果现在我们要写代码来完成不同类型之间的相加该怎么写呢? 

因为类型的不同,所以在这里我们就需要额外书写两个函数,一个来实现我们整形的相加,一个来实现浮点型的相加,因为C语言不允许同名函数的存在,相同会发生报错到不了链接的阶段。

而C++在这里引入了一个新的概念——函数重载函数重载允许函数名相同,但是却又要求其参数不同。参数的不同包含着——参数的个数,类型和顺序不同。

从这里可以看出函数重载可以自动识别我们的类型,如果类型是整形的话,这里就调用我们的第一个函数,如果是浮点型的话就调用第二个函数,这里就是我们的类型不同。 

下来函数我们的顺序不同和个数不同,我们就将他们的代码写一写。 

这里分别是我们参数的个数不同和顺序不同的代码。这里有人就要问了,函数重载会不会使我们的运行速度下降呢?答案是不会的,因为类型匹配的操作是在我们编译的时候进行的,运行的时候直接走就行了,因此函数重载影响的是我们的编译速度并非运行速度。 

既然我们的参数不同可以构成重载,那么我们的返回值不同是不是也能构成重载呢?答案是:不能。这是为什么呢?

其实在编译的时候,我们可以用到返回值,但是在调用的时候,我们只写入了参数,所以也就是说,在调用的时候我们并不看返回值是否不同因为无法区分,我们只看参数是否不同。它们在编译的时候就已经报错了,存在着函数调用歧义。(符号表在链接阶段生成)

这里我们也是对为什么C语言不允许函数名相同,而在我们的C++中可以允许我们函数名相同的原因,这里通过函数名修饰得出了这个结果。

那么这里我们要清楚的一个点是,如果我们有直接进行定义的话,就不需要再进行链接的操作,我们这里直接靠地址即可。

2.引用: 

引用不是新定义的一个变量,而且给已存在的变量名一个别名,这也是我们C++填补了我们原本C语言指针模块的一个坑

那么就有人要问了,我们的指针学习了这么久都没遇到什么问题,为什么会存在坑呢? 

其实我们在链表板块就遇到了,也就是我们的函数调用的参数原本就是指针类型的,因为形参的改变不影响实参,所以在接收的时候我们就要使用到二级指针,这对于当时的我们来说可以说是一大噩梦。 

这里我们的操作符是——&,同样的和运算符——<<一样是C语言和C++所可以通用的。接下来我们就来展示一下它的用法。

在这里我们画了一个图出来,这里我们可以看出来i和j虽然值都为0,但是它们却在两个不同的地址,而我们使用的引用操作符将i赋值给了k,这里就相当于我们的i和k指向了同一块地址。并且j进行++操作不会影响到i,k进行++操作会影响到i。 

并且我们这里还有套娃行为。

在这里我们可以发现一个套娃的操作,也就是我们可以为别名k取一个新的别名,也可以为原本的值i再取一个新的别名,并且两个别名都可以进行使用

那么在日常写代码的时候,我们在哪里会用到引用呢?这里我们举C语言中一个经典的题目,也就是交换两个数的值。 

在这里我们可以看见,如果用C语言的写法,我们要改变两数的值要传它们的地址,并且接收的时候要用指针接收,在进行交换的时候还需要对其进行解引用的操作,十分的麻烦。而在C++中,我们直接传的a和b两个数的值,在函数调用中因为我们的引用使得我们的x和y分别指向了和a,b两个数的地址,因为传参的时候只需要传值,接收的时候用引用来接收,并且修改的时候不需要解引用,这就是日常引用在代码中被作用的地方。 

同样的我们可以给整形定别名,也可以为指针定义别名。那么这里为指针定义别名要怎么做呢?

这里通过结果我们也看出我们的指针是成功的进行了交换,这也意味着我们可以为指针名别名来进行使用。 

同样的我们也可以对结构体进行定别名。 

 

以上就是我们两种对结构体进行定别名使用的方法,大家可以看一看。 

3.缺省参数:

接下来我们来讲C++中一个重要的知识点——缺省参数,我们也叫它为默认参数

我们先将代码写出来。 

在这里,形参的话要接收的变成了一个函数而非类型值,当我们实参没有传东西的时候,这里我们调用函数打印的就是形参的值,如果实参有值的话,那就直接打印我们实参的值,这种方法被我们称为缺省参数

当然我们的缺省参数也有许多可以用到的地方和规定所在。 

首先我们的缺省参数分为以下两种: 

左边的方法这种我们叫做的全缺省,而右边的这种方法因为a没有被缺省到,所以我们将其称之为半缺省。在这里我们的全缺省参数没有什么明确的规则去规定,但是我们的半缺省就有一些要注意的点了

首先就是我们的半缺省参数不能出现,实参为空的情况,并且半缺省参数也无法实现空一个值在进行缺省的操作。另外要注意我们的缺省参数必须是要从左到右进行缺省的。 

这里我们的缺省参数还可以运用在我们的结构体的开辟空间中,并且这里要注意的是,如果结构体有声明和定义同时存在的情况下,我们不能对二者都进行缺省,进行缺省的是我们的声明那一部分。 

结尾:

到这里,我们的这一篇博客也是正式的结束了,在这一篇博客中我们又学习到了不少有用的知识,在下一篇博客中,我们将继续对C++的入门内容进行一个讲解,最后希望这篇博客能给大家带来帮助。

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

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

相关文章

jar包内容修改

准备材料及环境&#xff1a; 1.安装jdk&#xff0c;这里安装了1.8版本&#xff0c;可以自由选择&#xff1b; 2.准备demo.jar 3.复制一份demo.jar该扩展名为demo.zip 4.本次使用的是windows系统 修改jar包内容&#xff1a; 1.解压demo.zip到本文件夹&#xff0c;解压后的…

根文件系统类型

Linux启动时&#xff0c;第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统&#xff0c;则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此&#xff0c;一个系统中可以同时存在不同的文件系统。 不同的文件系统类型有不同的特点&#xff…

浅谈图像生成模型 Diffusion Model 原理

重磅推荐专栏&#xff1a; 《Transformers自然语言处理系列教程》 手把手带你深入实践Transformers&#xff0c;轻松构建属于自己的NLP智能应用&#xff01; 可不可以先 点击下方链接&#xff0c;求赞 点击 like ❥(^_-) 一下我的 Model 和 Space&#xff0c;再看后面的正文~~&…

深度学习基础入门篇[七]:常用归一化算法、层次归一化算法、归一化和标准化区别于联系、应用案例场景分析。

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

学习小程序基础内容之页面结构

一个小程序页面由四个文件组成&#xff0c;分别是&#xff1a; 文件类型 必需 作用 js 是 页面逻辑 wxml 是 页面结构 json 否 页面配置 wxss 否 页面样式表wxss 否 页面样式表[TOC] 但是我们创建一个页面&#xff0c;最快的方法是在app.json 里面&#xff0c;命名一个文件&a…

Win10输入法设置,详细方法在这里!

案例&#xff1a;win10输入法怎么设置 【想问问大家知道win10输入法该怎么设置吗&#xff1f;想更改一些默认的设置&#xff0c;不知道该如何操作&#xff0c;感谢&#xff01;】 Win10输入法是在Win10操作系统下使用的一种输入工具&#xff0c;是Win10系统的默认输入法&…

【Vim】 【初始篇】Vim之增删改查(idcf)中的改(c)

前言&#xff1a; 都说上古神器vim&#xff0c;可以提高效率&#xff0c;但是我觉得它更能增加乐趣&#xff0c;还能装B于无形。所以我准备开个新的板块用于记录vim使用中的骚操作。 VS2022 使用Vim 作为一个.net程序员&#xff0c;不可能完全脱离vs而使用专门vim编辑器&#x…

Linux文件系统 文件恢复

inode和block block 用于存储文件数据。 文件是存储在硬盘上的&#xff0c;硬盘的最小存储单位叫做“扇区”&#xff08;sector&#xff09;&#xff0c;每个扇区存储512字节。连续八个扇区组成一个"块"&#xff08;block&#xff09;&#xff0c;一个块是4K大小&…

极豆科技加入飞桨技术伙伴计划,共筑智能网联汽车新生态

近日&#xff0c;极豆科技正式加入百度飞桨技术伙伴计划&#xff0c;双方将共同努力&#xff0c;联合推进人工智能、大数据、云计算等前沿技术在智能网联汽车领域的应用落地&#xff0c;携手推动汽车产业变革&#xff0c;加速车企迈向全面数字化。 上海极豆科技有限公司‍‍‍‍…

Java并发基石_CAS原理实战01_CAS机制入门

快了&#xff0c;快要拿到offer了&#xff01;&#x1f339; 案例引入&#xff1a; 开发一个网站&#xff0c;对访问量进行统计&#xff0c;用户每发送一次请求&#xff0c;访问量就1&#xff0c;模拟有100个人同时访问&#xff0c;并且每个人对网站发起10次请求&#xff0c;所…

Nginx+Tomcat负载均衡、动静分离群集

Tomcat优化 Tomcat是java开发的应用程序&#xff0c;作用&#xff1a;作为web服务器处理html页面&#xff0c;但能力一般&#xff0c;更多的用于jsp、servlet容器处理java开发的jsp动态页面。 组织架构&#xff1a;连接器 、 容器 连接器&#xff1a;暴露端口&#xff0c;接…

云表:无代码“打破”工业软件开发壁垒,数字化只需"画表格"

无代码已成为新兴趋势 近年来&#xff0c;在如火如荼的制造业数字化转型浪潮中&#xff0c;“无代码开发”也因其敏捷、易用的独有特性&#xff0c;助力企业实现数字化应用的快速开发与落地&#xff0c;使得数据业务价值在企业级场景下释放&#xff0c;受到市场广泛关注。据国际…

003 常用组件开发使用

目录 一.基础组件 Blank:填充控件 Button&#xff1a;按钮 ButtonType枚举说明 Text&#xff1a;文本显示 QRCode 二.常用布局 线性布局&#xff08;Row和Column&#xff09; 层叠布局 弹性布局&#xff08;Flex&#xff09; 一.基础组件 Blank:填充控件 这个是鸿蒙…

涨薪5k,100多天从功能测试进阶自动化测试,我整理的超全学习指南

个人简介 学渣一枚&#xff0c;2017年6月某大专学校毕业&#xff0c;从事功能测试已经4年&#xff0c;最初毕业是从事了一份销售的工作&#xff0c;工资当时好像是3k&#xff0c;可能也是我个人的原因不适合销售&#xff0c;后来在朋友的介绍下转行到了测试行业&#xff0c;转…

访问者模式解读

目录 问题引进 访问者模式基本介绍 基本介绍 访问者模式的原理类图 对原理类图的说明 访问者模式应用实例 思路分析和图解(类图) 代码实战 应用案例的小结 访问者模式的注意事项和细节 优点 问题引进 测评系统的需求 1) 将观众分为男人和女人&#xff0c;对歌手进行…

FPGA基于XDMA实现PCIE X8通信方案测速 提供工程源码和QT上位机程序和技术支持

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证9、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#xff09;采用了目前业内流行的点对点串行连接&#xff0c;比起 PC…

Ceph手动部署(开发版本)

手动部署 监视器引导管理器守护程序配置添加 OSD 简写形式长格式添加 MDS总结在 FreeBSD 上手动部署 FreeBSD 上的 Disklayout 配置监视器引导添加 OSD 长格式添加 MDS总结 手动部署 所有 Ceph 集群至少需要一个显示器&#xff0c;并且至少需要与 存储在群集上的对象的副本…

Hacked某安汽车车机系统

很久之前尝试对某安汽车的车机系统进行渗透测试&#xff0c;但是却卡在入口无法进入&#xff0c;尝试暴力破解但是字典不够强大&#xff0c;没能成功。前段时间看到了绿盟科技博客的《新型车机&#xff0c;如何攻防&#xff1f;》感觉有点熟悉&#xff0c;再次探索发现可以获得…

京东商品评论数据爬虫,包含对数据的采集、清洗、可视化、分析等过程,作为数据库课程。

感谢大家的star和fork&#xff0c;为了感谢大家的关注&#xff0c;特意对代码进行了优化&#xff0c;对最新的url格式进行了更新&#xff0c;减少了一些冗余的参数&#xff0c;希望能够帮助大家入门爬虫&#xff0c;已经爬好的京东的商品评论数据已经存储在data目录下&#xff…

软件测试标准GB/T 25000.51-2016中的八大软件质量特性

GB/T25000标准由下图所示的21个部分组成&#xff0c;其中GB/T 25000.10和GB/T 25000.51是建立软件测试技术体系可以参考的部分&#xff0c;GB/T 25000.51尤为重要。 GB/T 25000标准总标题&#xff08;21个部分&#xff09; GB/T 25000.51标准pdf封面 GB/T 25000.51-2016 《系统…