C++:自增运算符(++)重载

自增运算符(++)分为前置自增和后置自增,它们两者主要的区别是:返回的值不同,以及执行自增操作的顺序不同。

  1. 前置自增运算符 ++

    • 前置自增运算符首先将操作数加1,然后返回自增后的值。

    • 这意味着如果你使用前置自增运算符对一个变量进行操作,你会在其他任何操作之前得到自增后的值。

  2. 后置自增运算符 ++

    • 后置自增运算符也会将操作数加1,但是它会返回自增前的值。

    • 这意味着如果你使用后置自增运算符对一个变量进行操作,你会在其他任何操作之后得到自增前的值。

自减运算符(--)重载的实现思路也是一样的。

如下代码:

#include <iostream>
​
int main() {int a = 5;int b = 5;
​std::cout << "Original values: a = " << a << ", b = " << b << std::endl;
​int result1 = ++a; // 前置自增int result2 = b++; // 后置自增
​std::cout << "After pre-increment: a = " << a << ", result1 = " << result1 << std::endl;std::cout << "After post-increment: b = " << b << ", result2 = " << result2 << std::endl;
​return 0;
}
​

最后得到的结果:

Original values: a = 5, b = 5
After pre-increment: a = 6, result1 = 6
After post-increment: b = 6, result2 = 5

在前置自增的情况下,变量 a 在自增之后变为6,并且 result1 也是6;而在后置自增的情况下,变量 b 在自增之前为5,自增之后变为6,但是 result2 返回的是自增之前的值,因此是5。

在了解前置自增和后置自增的区别后那么这个时候我们就可以对这两种自增运算符进行重载:

前置++
class MyString {
public:int m_nNumberA;int m_nNumberB;
public:MyString() {};MyString(int NumberA, int NumberB) :m_nNumberA(NumberA), m_nNumberB(NumberB) {};MyString operator++(){this->m_nNumberA++;this->m_nNumberB++;return *this;};
};

在这个 MyString 类中,重载了前置自增运算符 ++

  1. MyString operator++():这是重载前置自增运算符 ++ 的函数声明。这个函数没有参数,因为前置自增运算符不需要参数。

  2. this->m_nNumberA++;this->m_nNumberB++;:在函数体内,成员变量 m_nNumberAm_nNumberB 分别被递增了1。使用 this 指针是为了明确指出正在操作当前对象的成员变量。

  3. return *this;:返回自增后的对象本身。这样可以实现链式调用,允许连续对同一个对象执行多次自增操作。

在函数中进行使用
int main() {MyString StringC(40,80);++StringC;
​std::cout << "自增后" << StringC.m_nNumberA << std::endl;std::cout << "自增后" << StringC.m_nNumberB << std::endl;
​system("pause");return 0;
}

运行后的结果:

后置++

class MyString {
public:int m_nNumberA;int m_nNumberB;
public:MyString() {};MyString(int NumberA, int NumberB) :m_nNumberA(NumberA), m_nNumberB(NumberB) {};//后置运算符重载MyString operator++(int){MyString * tempObj = this;this->m_nNumberA++;this->m_nNumberB++;return *tempObj;}
  1. MyString operator++(int):这是重载后置自增运算符 ++ 的函数声明。参数列表中的 int 参数并没有用到,它只是用来区分前置和后置自增运算符重载函数。

  2. MyString * tempObj = this;:创建了一个指向当前对象的指针 tempObj,这是为了保存当前对象的副本,在自增操作之前返回。

  3. this->m_nNumberA++;this->m_nNumberB++;:在函数体内,成员变量 m_nNumberAm_nNumberB 分别被递增了1。使用 this 指针是为了明确指出正在操作当前对象的成员变量。

  4. return *tempObj;:返回自增前的对象的副本。这是后置自增运算符的特性,它应该返回自增前的值。

在主函数中进行使用:

int main() {MyString StringD;StringD = StringObjA++;
​std::cout << "StringD:" << StringD.m_nNumberA << std::endl;std::cout << "StringD:" << StringD.m_nNumberB << std::endl;
​std::cout << "StringObjA:" << StringObjA.m_nNumberA << std::endl;std::cout << "StringObjA:" << StringObjA.m_nNumberB << std::endl;
​system("pause");return 0;
}

最后结果为:

因为使用的是后置++,所以StringD的赋值会在StringObjA自增之前进行。

至此自增运算符重载完成。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CNN笔记详解

CNN(卷积神经网络) 计算机视觉&#xff0c;当你们听到这一概念的是否好奇计算机到底是怎样知道这个图片是什么的呢&#xff1f;为此提出了卷积神经网络&#xff0c;通过卷积神经网络&#xff0c;计算机就可以识别出图片中的特征&#xff0c;从而识别出图片中的物体。看到这里充…

盘一盘接口测试的那些痛点,你现在会解决了吗

前言 说到接口测试&#xff0c;想必大家一定不会陌生。接口测试就是测试系统组件间&#xff0c;接口对接是否顺畅的一种测试。包括测试数据能否交换、能否传递、能否正常控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系&#xff0c;等等。 由于接口测试主要是检测系统…

2024网络安全面试问题宝典(4万字)

2024网络安全厂商面试问题宝典(4万字) 目录 评分标准网络基础问题 TCP建立连接要进行3次握手&#xff08;syn-syn&#xff0c;ack-ack&#xff09;&#xff0c;而断开连接要进行4次&#xff08;fin-ack-fin-ack&#xff09;TCP&#xff0c;UDP区别&#xff1a;安全常用的协议…

数据库基础--MySQL多表查询之联表查询

联表查询 定义&#xff1a;多张表联合在一起查询&#xff0c;例如学生信息与学生班级表、部门与员工表 创建两张表&#xff0c;主表与从表 CREATE TABLE TestMain(id INT Not NULL AUTO_INCREMENT,nameVARCHAR(10),introduction VARCHAR(255),PRIMARY KEY(id) ); CREATE TAB…

自动驾驶主流芯片及平台架构(二)特斯拉自动驾驶芯片平台介绍

早期 对外采购mobileye EyeQ3 芯片摄像头半集成方案&#xff0c;主要是为了满足快速量产需求&#xff0c;且受制于研发资金不足限制&#xff1b; 中期 采用高算力NVIDIA 芯片平台其他摄像头供应商的特斯拉内部集成方案&#xff0c;mobileye开发节奏无法紧跟特斯拉需求&#xff…

select,poll,epoll

在 Linux Socket 服务器短编程时&#xff0c;为了处理大量客户的连接请求&#xff0c;需要使用非阻塞I/O和复用&#xff0c;select&#xff0c;poll 和 epoll 是 Linux API 提供的I/O复用方式。 \selectpollepoll操作方式遍历遍历回调底层实现数组链表哈希表IO效率每次调用都进…

ROS 2边学边练(43)-- 利用GTest写一个基本测试(C++)

前言 在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;gtest&#xff08;Google Test&#xff09;是一个广泛使用的C测试框架&#xff0c;用于编写和执行单元测试。这些测试可以验证ROS节点、服务和消息等的正确性和性能。 如果我们需要在写的包中添加测试&…

kubectl_入门_service详解

Service 我们知道 Pod 的生命周期是有限的。可以用 ReplicaSet 和Deployment 来动态的创建和销毁 Pod&#xff0c;每个 Pod 都有自己的 IP 地址&#xff0c;但是如果 Pod 重建了的话那么他的 IP 很有可能也就变化了。 这就会带来一个问题&#xff1a;比如我们有一些后端的 Po…

Flink时间语义 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】

【基于MAX98357的Minimax&#xff08;百度&#xff09;长文本语音合成TTS 接入教程】 1. 前言2. 先决条件2.1 硬件准备2.2 软件准备2.3 接线 3. 核心代码3.1 驱动实现3.2 代码解析 4. 播放文本5. 结论 视频地址&#xff1a; SeeedXIAO ESP32S3 Sense【基于MAX98357的Minimax&am…

redis中的双写一致性问题

双写一致性问题 1.先删除缓存或者先修改数据库都可能出现脏数据。 2.删除两次缓存&#xff0c;可以在一定程度上降低脏数据的出现。 3.延时是因为数据库一般采用主从分离&#xff0c;读写分离。延迟一会是让主节点把数据同步到从节点。 1.读写锁保证数据的强一致性 因为一般放…

监视器和显示器的区别,普通硬盘和监控硬盘的区别

监视器与显示器的区别&#xff0c;你真的知道吗&#xff1f; 中小型视频监控系统中&#xff0c;显示系统是最能展现效果的一个重要环节&#xff0c;显示系统的优劣将直接影响视频监控系统的用户体验满意度。 中小型视频监控系统中&#xff0c;显示系统是最能展现效果的一个重要…

Linux字符设备驱动-详解与实操:驱动架构、设备树、Pinctrl子系统和GPIO子系统、platform、设备树下的platform

如何编写一个驱动程序&#xff1a; &#xff08;1&#xff09;确定主设备号 &#xff08;2&#xff09;定义自己的file_operations结构体&#xff1a; 包含对应的open(drv_open)/read(drv_read)等设备操作函数&#xff0c;需要到内核中去注册 &#xff08;3&#xff09;实现…

【微服务】服务保护(通过Sentinel解决雪崩问题)

Sentinel解决雪崩问题 雪崩问题服务保护方案服务降级保护 服务保护技术SentinelFallback服务熔断 雪崩问题 在微服务调用链中如果有一个服务的问题导致整条链上的服务都不可用&#xff0c;称为雪崩 原因 微服务之间的相互调用&#xff0c;服务提供者出现故障服务的消费者没有…

与Apollo共创生态:让智驾技术为各行业发展赋能

目录 一、引言 二、Apollo七周年大会主要内容回顾 2.1活动回顾链接 2.2Apollo项目介绍 2.2.1Apollo项目发展介绍 2.2.2实验用车传感器介绍 2.2.3硬件连接概述 2.2.4软件概述 2.3Apollo X 企业自动驾驶解决方案介绍 2.3.1Apollo X 企业自动驾驶解决方案优势 2.3.2 Ap…

报错(已解决):无法加载文件 D:\code\NodeJs\pnpm.ps1,因为在此系统上禁止运行脚本。

问题&#xff1a; 在vscode运行uniapp项目需要拉取全部依赖&#xff0c;需要使用到pnpm&#xff0c;在vscode终端运行命令&#xff1a;pnpm install后报错&#xff1a; 解决办法&#xff1a; 1&#xff1a;我未安装pnpm&#xff0c;首先打开电脑cmd&#xff0c;运行下列命令&a…

2024中国(江西)国际先进陶瓷材料及智能装备博览会

2024中国&#xff08;江西&#xff09;国际先进陶瓷材料及智能装备博览会 “中国&#xff08;江西&#xff09;国际先进陶瓷材料及智能装备博览会” 陶瓷三新展 &#xff08;新材料、新装备、新技术&#xff09; 绿色智能、引领未来 2024年11月1日-11月3日 中国江西 南昌…

初识指针(2)<C语言>

前言 前文介绍完了一些指针基本概念&#xff0c;下面介绍一下&#xff0c;const关键字、指针的运算、野指针的成因以及避免&#xff0c;assert函数等。 目录 const&#xff08;常属性&#xff09; 变量的常属性 指针的常属性 指针的运算 ①指针 -整数 ②指针-指针 ③指针与…

浅析扩散模型与图像生成【应用篇】(二十一)——DALLE·2

21. Hierarchical Text-Conditional Image Generation with CLIP Latents 该文提出一种基于层级式扩散模型的由文本生成图像的方法&#xff0c;也就是大名鼎鼎的DALLE2。在DALLE2之前呢&#xff0c;OpenAI团队已经推出了DALLE和GLIDE两个文生图模型了&#xff0c;其中DALLE是基…

Costas-Barker序列模糊函数仿真

文章目录 前言一、Costas 序列二、Barker 码三、Costas-Barker 序列模糊函数仿真1、MATLAB 核心代码2、仿真结果①、Costas-Barker 模糊函数图②、Costas-Barker 距离模糊函数图③、Costas-Barker 速度模糊函数图 四、资源自取 前言 Costas 码是一种用于载波同步的频率调制序列…