运算符重载和初始化列表

定时/计数器的初始化与计数初值的计算 一. 定时/计数器的初始化 初始化程序应完成如下工作: 1). 对TMOD赋值, 以确定T0和T1的工作方式. 2). 计算初值, 并将其写入 TH0, TL0 或者 TH1, TL1. 3). 使用中断方式时, 则对IE赋值, 开放中断. 4). 使 TR0 或 TR1 置位, 启动定时/计数器的定时或计数. 二. 初值的计算 假设定时器工作在方式1, 则位数是16位. 定 阅读详情

运算符重载

为了增强程序的可读性

本意就是让对象实例化后也能使用‘+’,‘-’,‘>’,‘

这里就要用到operator关键字

由于这三个变量都是类里面私有的,所以先暂时设置成共有的

如果我们要将结果打印出来,这样写就会报错,这是因为

所以这里代码需要点小小的修改,就会打印出布尔值

我们也可以将operator函数放在类里面,但是编译器说参数太多了

因为成员函数都有一个隐藏参数,所以只需要写一个参数就够了

这五个运算符不能重载

后面几个运算符的实现就可以使用代码复用

赋值运算符的重载

这就是简单的赋值运算符重载的实现

但似乎不能进行连等运算

上面的连等是先d1赋值给d3,赋值后就应该有个返回值,然后用这个返回值给d2赋值,所以我们给运算符重载函数加个返回值就行了,而且出了作用域*this还在,为了避免拷贝构造浪费空间就可以直接使用引用返回

而且还有可能会写出d1=d1这样自己赋值给自己的情况,所以函数还要改一下,将这种情况剔除

这里的两行代码也是拷贝构造;因为赋值重载是两个已经创建出来的的对象进行赋值,但是这里的d5和d6都是新创建然后赋值的,所以说这个是拷贝构造,而不是赋值重载

日期类

这个日期好像有些问题,所以要对构造函数进行修改

再写一个日期加天数的函数

顺便写个加的

还有前置++与后置++

前置++就正常写

后置++为了构成函数重载,就加了个参数

再写一个日期减等天数

再写个日期减天数

但有时会出现这种情况,这说明函数设计还是略有欠缺

修改一下就好了

再写个前置和后置--

再看看两个日期之间的天数的计算

流插入重载

接着我们发现好像实例化后的对象并不能直接使用cout函数,是因为

查官方文档可以知道,cout是ostream类型里面的一个对象

而且ostream是默认支持内置类型的

但是自定义类型却是不支持,需要自己写,但是ostream类是c++库里的不能修改,所以就只能重载

这里的out就是cout的别名,后面就可以直接将out当cout用

但由于调用函数是上面的,那么具体使用就变成了下面的,因为ostream类不能修改,所以就只能写在日期类里面了,但是写在日期类里面的话,日期类对象就抢占了第一个参数,所以cout就只能写在后面了

运算符重载不一定要作为成员函数,而是可以作为一个全局函数,但是就不能访问成员函数里面的私有成员变量

所以我们可以在类里面加一个友元函数,将这个流插入函数变成日期类的友元函数,这样就可以访问私有的成员变量了

这下就可以正常打印了

但是这里的cout好像不支持连续插入,其实这里是多次的函数调用,这里就相当于d1先插入到cout,然后返回cout,再将d2插入到cout中去。

这就是多个函数调用。所以这里的流插入重载就需要写返回值,返回的就是out,out就是cout的别名

流提取重载

当然,这个函数也必须是友元函数

我们也可以将这两个函数写成内联函数,这种短小的函数都可以写成内联函数

初始化列表

可以认为是成员变量定义的地方

默认生成的构造函数对内置类型不作处理,这里的_x成员变量是int类型的,编译器也不会作处理,但是这是个const修饰的变量,const修饰的变量只读不写,必须在定义的位置就初始化

所以必须给每个成员变量找一个定义的位置,不然像const这样的成员不好处理

哪个对象调用构造函数,初始化列表是所有成员变量定义的位置

不管是否显示在初始化列表写,编译器每个变量都会初始化列表定义初始化

就像这段代码,a1初始化列表没有定义,就用的缺省值1,a2初始化列表定义了,那么就是1,随后a1++,a2--,最终的a1是2,a2是0

再看一下这段代码

结果是1和随机值,这是因为成员变量在类中的声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

必须要在初始化列表中的定义的三种情况

1、const修饰的变量

2、引用

3、没有默认构造的自定义类型成员

看这一段代码,类A的构造函数是个单参数的

aa1是属于调用构造函数

而aa2则是类型转换,是一种隐式类型转换,是内置类型和自定义类型之间的转换

这里有一个内置类型之间的转换

i并不是直接转换成a的,而是会产生一个double类型的临时变量,i的值赋给临时变量,再由临时变量赋值给a。这个临时变量具有常性

这个类型转换也是一样的,也会创建一个临时变量;先用1去构造一个A的临时对象,再进行拷贝构造

现在验证一下,按刚才的分析打印的结果应该是两个构造一个拷贝构造

但结果只有两个构造

原来C++针对自定义类型产生临时变量的这种情况会进行优化

所以将构造+拷贝构造优化成了直接构造

再看看这个,ref不能引用这个10

但const修饰后就可以了,这恰恰证明了这个10产生了临时对象

如果在构造函数前面加上关键字 explicit 就不能进行隐式类型转换了

如果是多参数的构造函数,则是需要加大括号进行隐式类型转换的 加 explicit也同理

C++技术点积累(3)——对象初始化列表、运算符重载 C++技术累积: 1、构造函数的对象初始化列表——初始化列表先于构造函数的函数体执行 原因: 1)、必须这样做: 如果我们有一个类成员(A类),它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数, 而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数, 如果没有初始化列表,就无法初始化A类的对象(成员),也就无法确定该类本身的内存空 阅读详情

相关推荐

【C++】类成员初始化列表、三元运算符、运算符及其重载、箭头操作符

也就是类成员初始化列表。就是我们在构造函数中初始化类成员(变量,有时也叫属性)的一种方式。见mutable关键字。

因为热爱所以坚持 480

51单片机 自动重装载值计算

单片机在不同的方式下,有不同的最大值。咱们现在针对单片机的方式1,设最大值为M。那么M的值应该是: M=2^16 = 65535 因为定时器是在一直加1计数的,并且在达到并且超过M的值的时候产生一个中断,因此咱们的初值可以这样定义: X=M-计数值 何为计数值。可以这样理解,我们如果想定时1ms,那么在这1ms内,计数值就是单片机定时器一直加1的次数(加了多少个1)。   在举一个具体...

Xm行墨的博客 1万+

微信内置浏览器抓包全攻略:从ADB配置到Chrome调试(附常见问题解决)

本文提供了一套完整的微信内置浏览器抓包与调试解决方案。从ADB工具的深度配置与稳定性连接开始,详细讲解了如何开启X5内核调试开关,并利用Chrome DevTools建立远程连接。文章重点剖析了Network面板进行网络请求抓取、性能分析和问题定位的实战技巧,并附带了设备连接失败、无网络请求等常见问题的排查指南,帮助开发者高效解决微信H5页面调试难题。

gitlab7runner的博客 543

类和对象(四)运算符重载和初始化列表

主要介绍了运算符重载剩余的赋值运算符和取地址运算符以及初始化列表等

2502_92750401的博客 1244

关于esp32蓝牙模块的使用——esp32学习笔记

关于esp32蓝牙模块的使用——esp32学习笔记 零、前言 esp32自带蓝牙模块可以让我们进行蓝牙连接并进行数据交换 一、经典蓝牙BT 首先来编写代码,经典蓝牙的使用非常简单,首先声明使用了BluetoothSerial这个库,然后使用SerialBT.begin函数设置蓝牙的名字,再然后就是设置配对码,由于这里没有用到配对码,所以我将注释掉。当配对成功我们就使用printf函数打印出蓝牙配对成功。 #include <Arduino.h> #include <BluetoothSer

qq_53965184的博客 5万+

Plant simulation、Flexsim、Automod、Emulate3D、VisuaComponent仿真软件对比

E3D在行业内以展示效果好,入门阶段易学易用人机界面友好,电控仿真连接方便不需要借助其他第三方软件,E3D平台开放度较高用户DIY程度强,数据分析功能针对要评定对象的KPI的可根据项目或者使用者需求进行评定。3.支持导入导出多种格式的文件,比如dwg、dxf、fbx、obj、3ds、step、stp、iges、skp、stl、wrl、 bmp 等等。3.软件自带模型组件库程序代码开放,用户可以引用、修改、拷贝,按照自己的逻辑修改模型,或者创建模型并保存到组件库与别人共享。3. 支持导出布局图片。

qq_43342303的博客 3580

【C++类和对象Lesson3】运算符重载、const、初始化列表

文章目录一:运算符重载1.1:相等运算符重载1.2:赋值运算符重载1.3:小于运算符重载三级目录 一:运算符重载 C++为了增强代码的可读性引入了运算符的重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型以及参数列表,其返回值类型与参数列表与普通函数类似。 函数名字为:关键字operator后面接需要重载的运算符符号 函数原型:返回值类型 operator操作符(参数列表) 1.1:相等运算符重载 对内置类型我们想要判断两个变量是否相等我们可以直接使用相等运算符,但是如果是一个自定义类型呢?那么这

qq_43727529的博客 595

SIwave仿真手册——电源完整性仿真之PDN阻抗的提取(四)

(想不到我这个弱鸡的博主有一天也有被催更的时候,看到后台被催的消息,我慌了,赶紧写一篇把。) 文章目录3.1 PDN阻抗的提取3.1.1手动完成PDN阻抗的提取1、创建pin group2、创建端口3、数据文件的清理和检查(参考1.3.4&1.3.5)4、添加电容模型(参考2.2.1)(==这一步很重要==)5、开始仿真6、查看仿真结果3.1.2利用向导工具完成PDN阻抗的提取1、点击图标![在这里插入图片描述](https://img-blog.csdnimg.cn/36d974339ea5449

luohuo9844的博客 1万+

类和对象(三)运算符重载,初始化列表

运算符重载 理解拷贝构造和赋值 理解类中的const >>与

cxy_zjt的博客 416

【光子 AI 】应用 LangGraph 的核心模型和算法原理,完整实现一个极简版的 Agent 开发框架源代码,并给出具体的应用测试实际项目案例

下面给出一个“极简版 LangGraph 风格 Agent 框架”的完整可运行实现:用 有向图 + 状态(State) + 节点(Node) + 条件路由(Conditional Edge) + 循环(Loop) + Checkpoint 这一套核心模型/算法,把 Agent 组织成可编排、可测试的状态机工作流(这正是 LangGraph 的核心抽象之一:以 StateGraph 组织节点,节点读写共享状态,边做路由与循环,并支持持久化/回放)。 参考概念来源:LangGraph 官方文档对 “StateG

AI天才研究院 270

xtop:multi_driven_net与incomplete_timing_cell fail reason 分析

man multi_driven_net”可以得知,这个问题是multi driven结构引起的,使用命令“get_failed_pins -reason multi_driven_net”,获取violation pin。“man incomplete_timing_cell”可以得知,这个fail reason的原因是缺少timing library cell,检查并补全后这个错误就显示了。这里选择的解决方法是修改lib文件,把inout改成input,重新lib2idb。通过这种方法解决了问题。

m0_61544122的博客 566

C++运算符重载与初始化列表详解

C++运算符重载与初始化列表要点摘要 赋值运算符重载:当类管理动态资源时,需重载operator=实现深拷贝,避免浅拷贝导致的双重释放问题。关键点包括自赋值检查、释放旧资源、分配新资源及返回引用以支持链式赋值。 取地址运算符重载:通常无需重载operator&,但在禁止获取真实地址或实现代理类时可能用到,例如智能指针返回内部指针地址而非代理对象地址。 初始化列表: 构造函数初始化列表:直接初始化成员变量,提升效率(避免默认构造+赋值的开销),且对常量、引用及无默认构造的成员必需。初始化顺序与成员声明

CCCCCCCCharlie的博客 425

内容审核与文本安全技术综述:检测、过滤与对齐

检测质量高度依赖数据。毒性/仇恨/冒犯语言检测领域形成了一批经典数据集,但它们的标签体系差异很大:例如 OLID(OffensEval)强调“是否冒犯—冒犯类型—目标对象”三层结构;HateXplain 在“hate/offensive/normal”三分类之外,还提供目标群体与人类标注的 rationale span;RealToxicityPrompts 则不做离散标签,而是用毒性分数来研究“模型续写时的毒性退化”。ACL 汇编。

nmdbbzcl的博客 1371

C++运算符重载,初始化列表,隐式类型转换,友元

参数个数与操作个数应该一致(双目操作符就是2个参数,同时参数中包括this)

2301_80006788的博客 619

Pandas滚动窗口的妙用:动态计算列数据的最大值

Pandas的滚动窗口(rolling window)功能是数据分析中处理时间序列数据的重要工具。本文通过实例演示了如何使用rolling(window=4).max()计算DataFrame列A的滚动最大值,并将结果存入新列Max_Range。该方法会在4个元素的滑动窗口内计算最大值,前3行因数据不足显示为NaN。这种技术广泛应用于金融分析(如股价波动)、数据平滑和趋势识别等场景,能有效帮助分析数据的动态变化特征。示例展示了从数据准备到结果输出的完整流程,体现了Pandas在处理滑动窗口计算时的高效性和便

m0_74337424的博客 53

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

c++11中的初始化列表{}(非重载运算符{})

c++11中的初始化列表{}(非重载运算符{})

371

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【C++】类和对象 — 运算符重载 + 初始化列表 + 友元 + 日期类的实现(下篇)

👉类和对象(上篇)👉类和对象(中篇)上两篇已经讲了类和对象的基本使用和最难理解的默认成员函数,接下来将继续深入学习类和对象剩余的内容。

上上谦. 的博客 1016

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

[C++ ]:5.类和对象中(运算符重载补充)+ 类和对象下(初始化列表)

其他的运算符一般是实现在成员函数中,但是流插入和流提取操作符是实现在全局的。1.因为存在隐含的参数(影响了操作符的顺序)。1-1:写在全局改变了函数传参的顺序并且满足了正常的cout的使用顺序!2.写到全局访问不到私有的问题?2-1:友元解决!我们通过初始化列表就可以自己搞定初始化一个队列!通过初始化列表自己去调用对应的构造函数去完成我们想要多大的栈就可以初始化多大的栈!80%----100% 使用初始化列表:0%-20% 进行初始化列表+构造函数的混和使用!

2201_75943325的博客 258

C++类和对象(中—2) —— 初始化列表、运算符重载、赋值运算符重载、取地址重载、const成员函数、日期类的实现(友元函数)

本篇博客介绍了初始化列表、运算符重载、赋值运算符重载、const成员函数、取地址运算符重载等内容

weixin_59913110的博客 916

C++知识整理day3类与对象(下)——赋值运算符重载、取地址重载、列表初始化、友元、匿名对象、static

赋值运算符重载是六个默认成员函数之一,在讲解这个我们要先了解一下运算符重载。当运算符被用于类类型的对象时,C++语言允许我们通过运算符重载的形式指定新的含义。C++规定类类型对象使用运算符的时候,必须转换成调用对应运算符重载,若没有对应的运算符重载,则会报编译错误。注意:对于下面的例子中,都是使用的Date类。 运算符重载是具有特别名字的函数,他的名字是由operator和后面要定义的运算符共同构成。和其他函数一样,他也具有其返回类型和参数列表以及函数体。 重载运算符函数的参数个数和该运算符作⽤的运算对象

qq_59702185的博客 1194

类与对象(c++)——取地址运算符重载,初始化列表,类型转换

例如:反复定义成员_hour报错:c)

2401_83456040的博客 722

【C++入门】类的6个默认成员函数、运算符重载、初始化列表、const成员、static成员

在对象实例化时通过上述的构造函数后,类的成员变量有了一个初值,但这并不是初始化,严格来说,应该是赋值,因为在函数体内,可以给同一变量多次赋值,但每一个变量的初始化只有一次,所以,在函数体内给值根本不叫初始化。上面我们说过,初始化列表是用来给成员变量初始化的,具体的说,是用来给实例化出的对象中的变量初始化的,而静态成员为所有类对象共享,不属于某个具体对象,所以它不是在初始化列表初始化的。不可以,const对象中的成员是不可以修改的,而非const对象中的成员是可以修改的,这是典型的。

记录代码路上的点滴思考。 1218

构造函数 | 初始化列表 | 拷贝构造 | 赋值运算符重载

C++构造函数,初始化列表,拷贝构造,赋值运算符重载,要点总结!

qq_63159859的博客 1060

(C++) 类和对象 (二) 默认成员函数 构造 析构 拷贝构造 赋值重载 初始化列表 运算符重载

类和对象第二小节:默认成员函数,初始化列表,运算符重载

m0_71914032的博客 702

优先队列重载运算符< 以及初始化列表

优先队列定义 priority_queue<int, vector<int>, greater<int> >pq; 优先队列重载<运算符 在结构体中定义一个 friend bool operator<(node n1,node n2){ retur...

weixin_30388677的博客 75
上一篇: 类和对象——开始步入正轨
下一篇: const修饰的成员,静态成员和匿名对象
宴之敖者、
博客等级 码龄4年 131粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值