【C++】C++中的花式操作:lambda表达式、类成员初始化列表、三元运算符、运算符及其重载。。。

news2024/11/16 4:36:10

八、C++中的花式操作:lambda表达式、构造函数初始化列表、三元运算符

10、lambda表达式
见mutable关键字:【C++】C++中的关键字:const、mutable、auto、new....-CSDN博客。

11、构造函数初始化列表
当我们编写一个类时,一般都要有一个构造函数对类中的成员(变量,有时也叫属性)进行初始化。
其实这个初始化的构造函数有两种写法,一种是前面示例中的赋值初始化,另一种就是现在我们要重点讲的初始化列表
也就是类成员初始化列表也是类成员初始化的一种方式。

(1)两种初始化方式:

(2)为什么要用列表初始化?
仅仅是代码风格吗?也有这方面的因素。试想,当你A处声明的变量非常多的时候,你赋值初始化就需要很多行代码,而列表初始化代码就简洁明了很多。
但更主要的原因是:

初始化e1时,类P之所以被初始了2次是因为,一次是在A处,一次是在B处。A处虽然是成员变量区,但并不意味着不会运行代码并创建对象!所以在A处就已经无参实例化了一个小p。然后代码运行到B处,在B处又创建了一个新P实例,然后把它赋值给小p,就是覆盖第一次实例的小p。
但是当我们使用列表初始化后,就避免了两次实例化P。所以以后能用列表初始化的尽量用列表初始化,不然会浪费性能。

12、三元运算符
所谓的三元运算符就是一个问号一个冒号。它实际上只是if..else语句的语法糖。

从上面的例子中可以看到三元运算符也就是仅仅让代码更简洁,至于是否更容易理解就仁者见仁智者见智了。
或者你从这个角度理解会更理解一些:if..else语句的本质就是赋值,如上例,本质就是给b赋值,但赋值是有条件的,所以写条件?成立就是10,不成立就是5。这其实就是一个条件赋值语句嘛。

说明:上图B处的声明语句string s1;其实是会构造一个空字符串对象,然后再用一个新对象覆盖这个空字符串。所以从技术上讲更慢。因为你先构造了一个临时字符串,然后又立即销毁它。而A处没有构建中间字符串的原因实际上是与返回值优化有关,是编译器的做了优化。

其实三元运算符还可以嵌套:

虽然嵌套的可读性差了一些,但是不用写很多if,代码简洁了不少。套娃无止境,还可以花式套,比如每个条件再加一些&&或者||等,但是一般还是别花式嵌套了吧,读代码的人很容易懵。

13、运算符及其重载
C++中运算符有很多,比如数学运算符加减乘除、逆向引用的箭头->也是运算符、+=、++、--、-=、&取址运算符、<<、>>、逗号、圆括号、方括号等等都是运算符。还有一些比如前面刚讲的new和delete也是运算符,还给大家展示了new和delete的底层定义函数,以及各自重载函数。不记得的同学回看 【C++】C++中的关键字:const、mutable、auto、new....-CSDN博客

这些运算符表面上看是一些符号,其实背后都是函数,都是调用了对应的函数去执行相应的功能。或者说,就是都写成多态(同名不同参)的样子,然后调用的时候根据参数进行重载。本部分我就介绍三个样例,给大家详细展示一下什么是运算符及其重载。

(1)向量运算符示例
运算符函数究竟怎么写,主要取决于你的应用场景,你想在什么场景下怎么使用。比如我想先能生成向量,然后生成的向量还可以做加法、乘法等之类的:

上述代码虽然实现了最初的简单需求,但是我们加法用Add,乘法用Multiply,是相当麻烦的,单词拼不对就很头疼。所以我打算改成+和*,这样不仅方便,代码还会更清晰可读。此时就该重载上场了:

这样就可以重载了。而且还可以像下面的风格来写:

其实,大家更习惯的写法是上面的第二种写法,就是先写符号函数,再写正常函数。写正常函数时用指针this,并使用符号函数。

(2)std::cout中使用的左移运算符
上面的例子中我们打印向量时非常麻烦,要一个个元素打印,那是因为<<运算符没有重载现在我们自己创造的这种Vec对象,下面我们再针对Vec这个类型,写一个<<重载函数: 

可见符号函数的语法是operator后面直接写你的符号,再后面是小括号里面放参数。通过这两个小例子,你现在就可以写任何你想的符号了,然后用符号替代函数。

(3)是否相等重载符
还是使用上面的例子,判断两个向量是否相等,返回bool值:

在写库时,运算符及其重载就会被经常写。

待续。。。。

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

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

相关文章

鼠标指针美化 一大批鼠标指针特效 喜欢的快点收藏~!

鼠标指针美化 一大批鼠标指针特效 喜欢的快点收藏~&#xff01;鼠标指针美化&#xff0c;这个功能可能许多人都没用过&#xff0c;应该还有很多人都是用着系统默认的鼠标指针&#xff0c;我们今天给大家分享一个可以修改鼠标指针的工具&#xff0c;如果你也喜欢&#xff0c;那麻…

类比推理-错题集

001 解析 &#xff1a; 002

[Visual Stuidio 2022使用技巧]3.模板

本文主要介绍本人在使用vs2022开发WPF桌面程序时使用到的一些插件及配置。 语言&#xff1a;C# IDE&#xff1a;Microsoft Visual Studio Community 2022 框架&#xff1a;WPF&#xff0c;.net 8.0 一、工程模板 1.1 创建模板 编辑好模板代码&#xff0c;扩展及NuGet包之…

【2024全国大学生数学建模竞赛】E题 模型建立与求解(含代码与论文)

目录 一、问题重述 1.1 问题背景 1.2 问题回顾与分析 四、问题求解与分析 4.1 问题1求解与分析 4.1.1 问题1分析 4.1.2 问题1建模与求解 按照提交论文的格式进行撰写&#xff01;完整版请看文章最后&#xff01; 一、问题重述 1.1 问题背景 随着城市化进程的加快、机动…

mysql笔记3(数据库和表的基础操作)

文章目录 一、数据库的基础操作1. 显示所有的仓库(数据库)2. 创建数据库注意(命名规范)&#xff1a; 3. 删除数据库4. 查看创建数据库的SQL5. 创建数据库时跟随字符编码6. 修改数据库的字符编码 二、表的基础操作1. 引入表的思维2. 引用数据库3. 查看该数据库下面的表4. 创建表…

微信小程序webgl 显示图片

// wxml <view class"container"><!-- 加载地图容器 --><canvas type"webgl" id"testMap" style"width: 100%; height: 100%;" disable-scroll bindtouchstart"touchStart" bindtouchmove"touchMove&qu…

直播美颜SDK与主播美颜工具:实时美颜技术的深度解析

本篇文章&#xff0c;笔者将深入解析直播美颜SDK的核心技术与主播美颜工具的开发原理。 一、什么是直播美颜SDK&#xff1f; 通过集成美颜SDK&#xff0c;开发者可以在直播应用中快速实现脸部优化、滤镜添加、皮肤调整等功能&#xff0c;帮助主播在直播过程中实时呈现最佳状态…

linux线程cp模型,posix信号量,线程池,线程封装,单例模型,懒汉饿汉实现方式,自旋锁,读者写者模型

1.生产者消费者模型 前面的同步&#xff0c;我们并没有一个很好的场景来模拟同步&#xff0c;只是简单的将有序的现象输出出来&#xff1b;现在我们来讲解一个比较合理且常见的模型——生产者消费者模型&#xff1b; 1.1模型理解 什么是生产者消费者模型&#xff1a; 这个模…

书籍爱好者的福音:Spring Boot实现的个性化推荐

1 绪论 1.1研究背景 随着网络不断的普及发展&#xff0c;图书个性化推荐系统依靠网络技术的支持得到了快速的发展&#xff0c;首先要从学生的实际需求出发&#xff0c;通过了解学生的需求开发出具有针对性的首页、图书信息、好书推荐、留言反馈、个人中心、后台管理功能&#x…

Go Web 编程 PDF

&#x1f4da; Go Web开发必读:《Building Web Applications with Go》PDF资源分享 &#x1f50d; 找寻良久,终于寻得这本珍贵资源!现在我免费分享给大家 你是否正在学习Go语言开发Web应用?是否想要提升Go并发编程能力?这本书绝对不容错过! &#x1f4d6; 关于这本书 《B…

AC访问规则--规则优先级

按照以下进行优先级排序&#xff1a; 1.Specific Rules Have Priority 特定规则是一种关联以下内容的规则&#xff1a; ・通过指定其 AID 或指定隐式选择的应用来关联安全元件应用&#xff0c;并且 ・通过指定其 DeviceAppID 来解释一个设备应用&#xff0c; 通用规则是适用…

力扣1049-最后一块石头的重量II(Java详细题解)

题目链接&#xff1a;1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完01背包&#xff0c;所以现在的题解都是以01背包问题为基础再来写的。 如果大家不懂…

Xilinx高速接口文档简介

Xilinx的高速资源手册比较详细的介绍的介绍有ug482-GTP&#xff0c;ug486-GTX&#xff0c;ug576-GTH 基本结构资源和原语都大致相同 GTP主要在A系列芯片中 GTX主要在K系列芯片中 XILINX系列中有专用的高速接口资源&#xff0c;这些也是FPGA中最有价值的存在。 这些高速资源被称…

springboot小儿推拿培训系统

基于springbootvue实现的小儿推拿培训系统 &#xff08;源码L文ppt&#xff09;4-50 3系统设计 3.1系统功能结构 系统结构图可以把杂乱无章的模块按照设计者的思维方式进行调整排序&#xff0c;可以让设计者在之后的添加&#xff0c;修改程序内容的过程…

网传“有手就能过”的PMP,是不是真的那么水?!

“PMP真的很简单啊&#xff0c;我都没有复习就刷刷题就过了。” “3A上岸&#xff0c;就刷了两天题就直接去考了。” “感觉真的就是花钱随便过&#xff0c;我还以为多难呢&#xff0c;一次就考过了。” …… 上面这样的发言你是不是在好多平台都见过&#xff1f; 你是不是也在…

SAP HCM 如何计算缺勤实数

导读 INTRODUCTION 缺勤实数&#xff1a;这几天好几个朋友问题有什么办法可以计算出缺勤的时长&#xff0c;因为计算时长需要和排班去匹配&#xff0c;所以逻辑复杂度还是比较高的&#xff0c;希望有标准的函数能完成。其实SAP有个标准的函数可以完成&#xff0c;复杂的时候填…

合宙Air780E硬件设计手册02

上文文主要介绍了Air780E的硬件设计中的的应用接口部分。 上文链接&#xff1a;Air780E低功耗4G模组硬件设计手册01-CSDN博客 在本文我们会继续介绍Air780E的硬件设计介绍。 二、应用接口 2.10 SIM卡接口 Air780E支持2路SIM卡接口&#xff0c;支持ETSI和IMT-2000卡规范&am…

P0.9全倒装COB超微小间距LED显示技术的优势

P0.9全倒装COB&#xff08;Chip On Board&#xff09;超微小间距LED显示技术&#xff0c;以其前所未有的精细度与卓越性能&#xff0c;正逐步引领显示行业迈向新的纪元。这项技术不仅极大地缩小了LED灯珠之间的间距&#xff0c;实现了像素点的极致密集排列&#xff0c;更通过全…

修复msvcp100.dll文件丢失的问题,如何高效率修复msvcp100.dll

在Windows操作系统中&#xff0c;msvcp100.dll是Microsoft Visual C 2010 Redistributable Package的一部分&#xff0c;它支持多种与C库相关的关键功能。这个文件对于许多程序的正常运行非常重要。有时用户可能会遇到msvcp100.dll文件缺失的问题&#xff0c;这会导致某些程序无…

030集——自动弹出对话框、选择文件并播放wav音频文件(winform窗体)——C#学习笔记

如图所示&#xff0c;效果如下&#xff1a; 步骤如下&#xff1a; 新建一个winform窗体&#xff0c;双击界面&#xff0c;进入代码区&#xff1a; 复制&#xff08;下面代码中命名空间内的代码&#xff09;到&#xff08;你的命名空间下&#xff09;&#xff0c;运行。 using …