【c++】运算符重载【基本、左移、递增】

1. 基本运算符重载

这里以加法运算符重载为例,减法乘法除法等基本运算符重载原理是一样的。
比如我们想实现Person类中的两个实例化变量p1和p2中对应变量的相加操作,我们需要对加法运算符进行重载。
类的定义如下:

class Person {
public:int a;int b;
};

重载代码:

Person operator+(Person& p1, Person& p2) {Person  temp;temp.a = p1.a + p2.a;temp.b = p1.b + p2.b;return temp;
}

根据需求自行实现各种形式的重载函数即可,关键是使用operator关键字

2. 左移运算符重载

使用cout输出时,往往需要指定输出的对象,比如指定输出某个类中的某个变量,但若想一次性输出该类中的所有变量,则需要对左移运算符(<<)重载
用(1)中的案例,假设Person类中有a和b两个int元素,我们想一次性输出他们,则对cout的<<运算符进行重载

ostream& operator << (ostream& cout, Person p) {cout << "a = " << p.a << " " << "b = " << p.b;return cout;
}

需要注意的是cout函数返回对象是输出流ostream

3. 递增运算符重载

(1)前置递增的重载(++a)
假设我们的功能是让Person类中的a和b变量自增1,则重载如下

Person& operator++ (Person& p) {   // ++ap.a++;p.b++;return p;
}

需要注意的是前置递增重载时返回的是引用类型,因为如果返回一般类型,则导致p中的a和b在内存中的实际值未被修改

(2)后置递增的重载(a++)

Person operator ++ (Person& p,int) {   // a++Person temp;temp.a = p.a;temp.b = p.b;p.a++;p.b++;return temp;
}

注意:
(i)函数参数中的int是占位符,固定写法,让编译器知道这个是重载后置的递增运算符
(ii)返回类型是普通类型而并非引用类型,因为我们的返回对象是temp,是一个局部对象,而当该函数执行完之后局部对象就已经被释放了,这个时候再返回引用相当于是一个空引用,是非法的。

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

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

相关文章

Maya人物建模

【MAYA人物建模】超详细讲解人物嘴巴、鼻子、眼睛、耳朵、头发、帽子等布线细节&#xff0c;零基础人物头部布线教程_哔哩哔哩_bilibili 原始图像凑合用&#xff0c;视屏中截图 图像导入过程技巧总结 前视图/右视图模式下导入图形 创建图层 锁定后可以避免图片位置的移动 前视…

Python学习日记之学习turtle库(上 篇)

一、初步认识turtle库 turtle 库是 Python 语言中一个很流行的绘制图像的函数库&#xff0c;想象一个小乌龟&#xff0c;在一个横 轴为 x、纵轴为 y 的坐标系原点&#xff0c;(0,0)位置开始&#xff0c;它根据一组函数指令的控制&#xff0c;在这个平面 坐标系中移动&#xff0…

基于华为atlas的unet分割模型探索

Unet模型使用官方基于kaggle Carvana Image Masking Challenge数据集训练的模型。 模型输入为572*572*3&#xff0c;输出为572*572*2。分割目标分别为&#xff0c;0&#xff1a;背景&#xff0c;1&#xff1a;汽车。 Pytorch的pth模型转化onnx模型&#xff1a; import torchf…

探索Web中的颜色选择:不同取色方法的实现

在Web开发中&#xff0c;提供用户选择颜色的功能是很常见的需求。无论是为了个性化UI主题&#xff0c;还是为了图像编辑工具&#xff0c;一个直观且易用的取色器都是必不可少的。本文将介绍几种在Web应用中实现取色功能的方法&#xff0c;从简单的HTML输入到利用现代API的高级技…

计算机设计大赛 深度学习的动物识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

蓝桥杯2023年-平方差(数学)

题目描述 给定 L, R&#xff0c;问 L ≤ x ≤ R 中有多少个数 x 满足存在整数 y,z 使得 x y2 − z2。 思路 首先想到&#xff1a;x-y(xy)(x-y)&#xff0c;首先如果是奇数2*n1&#xff0c;肯定可以分成(n1n)*(n1-n)的形式&#xff0c;所以奇数是肯定可行的&#xff0c;然后…

面试中如何介绍zookeeper的ZAB协议

解释 ZAB 协议的基本概念&#xff1a;简单介绍 ZAB 协议的全称&#xff08;Zookeeper Atomic Broadcast&#xff09;以及它在 Zookeeper 中的作用&#xff0c;即确保分布式系统中的数据一致性和原子性。强调 ZAB 协议的核心目标&#xff1a;说明 ZAB 协议的主要目标是实现分布式…

Linux中PATH、LIBRARY_PATH、LD_LIBRARY_PATH的作用

1、PATH PATH是存储可执行文件搜索路径的系统环境变量&#xff0c;它包含了一组由冒号 : 分隔的目录列表。当运行一个命令时&#xff0c;操作系统会在这些目录中查找相应的可执行文件&#xff0c;并在找到后执行它。 例如&#xff0c;在命令行中执行ls命令时&#xff0c;就会依…

掌握Java建造者模式:逐步构建复杂对象的艺术与实践

建造者模式的主要目的是将一个复杂对象的构建过程封装起来&#xff0c;使得客户端代码不需要知道对象创建的细节。这种模式特别适用于那些具有多个组成部分、创建过程复杂、对象属性多且大多数属性可选的场合。 在Java中&#xff0c;建造者模式通常涉及以下几个角色&#xff1…

Android Studio Iguana | 2023.2.1版本

Android Gradle 插件和 Android Studio 兼容性 Android Studio 构建系统基于 Gradle&#xff0c;并且 Android Gradle 插件 (AGP) 添加了一些特定于构建 Android 应用程序的功能。下表列出了每个版本的 Android Studio 所需的 AGP 版本。 如果特定版本的 Android Studio 不支持…

如何将MathType嵌入到word中 word打开MathType显示错误

当我们编辑好mathtype公式以后&#xff0c;有时候需要将这个公式导入到word中&#xff0c;但是有不少用户们不清楚mathtype如何嵌入到word中。今天小编就给大家说明一下mathtype公式导入word的两种不同方法&#xff0c;有需要的用户们赶紧来看一下吧。 一、mathtype如何嵌入到…

C++流行的开源框架和库总结

目录 引言&#xff1a; 标准库 框架C通用框架和库 人工智能与机器人学习 异步事件循环 音视频多媒体 压缩压缩和归档库 并发性并发执行和多线程 容器 密码学 数据库&#xff0c;SQL服务器&#xff0c;ODBC驱动程序和工具 游戏引擎 图形与图像 国际化 Json 日志…

常见故障树管理与应用软件

故障树管理与应用软件主要包括以下几类&#xff1a; 故障树绘图软件&#xff1a; 微软公司的Visio软件&#xff1a;一款功能强大的绘图软件&#xff0c;可用于绘制故障树图&#xff0c;但主要侧重于绘图功能&#xff0c;不具备分析功能。亿图故障树图绘制软件&#xff1a;同样…

Java - JVM

文章目录 一、JVM1. JVM的作用2. JVM、JRE、JDK的关系3. JVM的组成4. JVM工作流程5. 运行时方法区Runtime Data Area 二、深入JVM内存模型&#xff08;JMM&#xff09; 一、JVM 1. JVM的作用 Java代码编译成java字节码后&#xff0c;运行在JVM中&#xff0c;只要针对不同的系统…

保姆级讲解 Stable Diffusion

目录 本文讲解思路介绍 一、引入 二、Diffusion Model 三、原文的摘要和简介 四、Stable Diffusion 4.1、组成模块 4.2、感知压缩 4.3、条件控制 五、图解 Stable Diffusion 5.1、潜在空间的扩散 5.2、条件控制 5.3、采样 5.4、Diffusion Model 与 Stable Diffusion …

OnlyFans如何微信支付?订阅Onlyfans虚拟卡?OnlyFans订阅推荐指南教程

OnlyFans 订阅教程&#xff0c;手把手教你使用虚拟信用卡订阅 大家好&#xff0c;大家都在关心OnlyFans如何订阅怎么订阅&#xff0c;能不能用微信或者支付宝来订阅&#xff0c;首先微信是不行的&#xff0c;本文教大家如何在 Onlyfans 订阅和支付&#xff08;虚拟信用卡&#…

【Tauri】(4):使用Tauri1.5版本+candle框架运行大模型,前后的搭建运行成功,整合前端项目,在应用中显示。

1&#xff0c;视频地址 关于tauri 框架 2&#xff0c;搭建rust 环境 # 设置服务器国内代理&#xff1a; export RUSTUP_DIST_SERVER"https://rsproxy.cn" export RUSTUP_UPDATE_ROOT"https://rsproxy.cn/rustup"# 设置环境变量 export RUSTUP_HOME/data/…

R语言基础的代码语法解译笔记

1、双冒号&#xff0c;即&#xff1a;“::” 要使用某个包里的函数&#xff0c;通常做法是先加载&#xff08;library&#xff09;包&#xff0c;再调用函数。最新加载的包的namespace会成为最新的enviroment&#xff0c;某些情况下可能影响函数的结果。而package name::funct…

【操作系统学习笔记】处理器管理1.2

【操作系统学习笔记】处理器管理1.2 参考书籍: 王道考研 视频地址: Bilibili 进程的状态与转换、进程的组织 状态 进程正在被创建时&#xff0c;它的状态是创建态&#xff0c;在这个阶段操作系统会为进程分配资源、初始化 PCB当进程创建完成后&#xff0c;便进入就绪态&…

java ~ word模板填充字符后输出到指定目录

word文件格式&#xff1a; jar包&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.10.0</version></dependency>样例代码&#xff1a; // 封装参数集合Map<String, Ob…