当前位置: 首页 > news >正文

C++类的运算符重载

目标

让自定义的类直接使用运算符运算

代码

头文件及类定义

#include <iostream>using namespace std;
class Complex
{int rel;int vir;
public:void show(){cout <<"("<<this->rel<<","<<this->vir<<"i"<<")"<<endl;}Complex(int rel,int vir):rel(rel),vir(vir){}Complex(){}Complex operator+(const Complex other);Complex operator-(const Complex other);Complex operator/(const Complex other);Complex operator*(const Complex other);Complex operator%(const Complex other);bool operator==(const Complex other);bool operator>(const Complex other);bool operator<(const Complex other);bool operator&&(const Complex other);bool operator||(const Complex other);bool operator!();Complex operator++();Complex operator--();friend Complex operator++(Complex &c1,int);friend Complex operator--(Complex &c1,int);};

自增自减运算符

//后自增
Complex operator++(Complex &c1,int)
{Complex temp;temp.rel=(c1.rel)++;temp.vir=(c1.vir)++;cout <<"("<<temp.rel<<","<<temp.vir<<"i"<<")"<<endl;return temp;
}
//后自减
Complex operator--(Complex &c1,int)
{Complex temp;temp.rel=c1.rel--;temp.vir=(c1.vir)--;cout <<"("<<temp.rel<<","<<temp.vir<<"i"<<")"<<endl;return temp;
}
//前自增
Complex Complex::operator++()
{Complex temp;temp.rel=++(this->rel);temp.vir=++(this->vir);cout <<"("<<temp.rel<<","<<temp.vir<<"i"<<")"<<endl;return temp;
}
//前自减
Complex Complex::operator--()
{Complex temp;temp.rel=--(this->rel);temp.vir=--(this->vir);cout <<"("<<temp.rel<<","<<temp.vir<<"i"<<")"<<endl;return temp;
}

逻辑判断运算符

//等于判断
bool Complex::operator==(const Complex other)
{cout<<"("<<this->rel<<","<<this->vir<<"i"<<")"<<"=="<<"("<<other.rel<<","<<other.vir<<"i"<<")";cout<<boolalpha<<((this->rel==other.rel)&&(this->vir==other.vir))<<endl;return (this->rel==other.rel)&&(this->vir==other.vir);
}
//大于判断
bool Complex::operator>(const Complex other)
{cout<<"("<<this->rel<<","<<this->vir<<"i"<<")"<<">"<<"("<<other.rel<<","<<other.vir<<"i"<<")";cout<<boolalpha<<((this->rel>other.rel)&&(this->vir>other.vir))<<endl;return (this->rel>other.rel)&&(this->vir>other.vir);
}//小于判断
bool Complex::operator<(const Complex other)
{cout<<"("<<this->rel<<","<<this->vir<<"i"<<")"<<"<"<<"("<<other.rel<<","<<other.vir<<"i"<<")";cout<<boolalpha<<((this->rel<other.rel)&&(this->vir<other.vir))<<endl;return (this->rel<other.rel)&&(this->vir<other.vir);
}

逻辑与或非

//逻辑与
bool Complex::operator&&(const Complex other)
{cout<<"("<<this->rel<<","<<this->vir<<"i"<<")"<<"&&"<<"("<<other.rel<<","<<other.vir<<"i"<<")";cout<<boolalpha<<((this->rel||this->vir)&&(other.rel||other.vir))<<endl;return (this->rel||this->vir)&&(other.rel||other.vir);
}
//逻辑或
bool Complex::operator||(const Complex other)
{cout<<"("<<this->rel<<","<<this->vir<<"i"<<")"<<"||"<<"("<<other.rel<<","<<other.vir<<"i"<<")";cout<<boolalpha<<((this->rel||this->vir)||(other.rel||other.vir))<<endl;return (this->rel||this->vir)||(other.rel||other.vir);
}
//逻辑非
bool Complex::operator!()
{cout <<"!"<<"("<<this->rel<<","<<this->vir<<"i"<<")"<<":";cout<<noboolalpha<<(!(this->rel||this->vir))<<endl;return !(this->rel||this->vir);
}

算术运算符

//成员函数版本的加法运算符重载
Complex Complex::operator+(const Complex other)
{Complex temp;temp.rel =  this->rel+other.rel;temp.vir = this->vir+other.vir;cout<<"("<<this->rel<<","<<this->vir<<"i"<<")"<<"+"<<"("<<other.rel<<","<<other.vir<<"i"<<")";cout <<"="<<"("<<temp.rel<<","<<temp.vir<<"i"<<")"<<endl;return temp;
}
//成员函数版本的减法运算符重载
Complex Complex::operator-(const Complex other)
{Complex temp;temp.rel = this->rel-other.rel;temp.vir = this->vir-other.vir;cout<<"("<<this->rel<<","<<this->vir<<"i"<<")"<<"-"<<"("<<other.rel<<","<<other.vir<<"i"<<")";cout <<"="<<"("<<temp.rel<<","<<temp.vir<<"i"<<")"<<endl;return temp;
}
//成员函数版本的除法运算符重载
Complex Complex::operator/(const Complex other)
{Complex temp;temp.rel = this->rel/other.rel;temp.vir = this->vir/other.vir;cout<<"("<<this->rel<<","<<this->vir<<"i"<<")"<<"/"<<"("<<other.rel<<","<<other.vir<<"i"<<")";cout <<"="<<"("<<temp.rel<<","<<temp.vir<<"i"<<")"<<endl;return temp;
}
//成员函数版本的乘法运算符重载
Complex Complex::operator*(const Complex other)
{Complex temp;temp.rel = this->rel*other.rel;temp.vir = this->vir*other.vir;cout<<"("<<this->rel<<","<<this->vir<<"i"<<")"<<"*"<<"("<<other.rel<<","<<other.vir<<"i"<<")";cout <<"="<<"("<<temp.rel<<","<<temp.vir<<"i"<<")"<<endl;return temp;
}
//成员函数版本的除余运算符重载
Complex Complex::operator%(const Complex other)
{Complex temp;temp.rel = this->rel%other.rel;temp.vir = this->vir%other.vir;cout<<"("<<this->rel<<","<<this->vir<<"i"<<")"<<"%"<<"("<<other.rel<<","<<other.vir<<"i"<<")";cout <<"="<<"("<<temp.rel<<","<<temp.vir<<"i"<<")"<<endl;return temp;
}

主函数

int main()
{Complex c1(9,25);Complex c2(3,5);c1.operator+(c2);c1.operator-(c2);c1.operator*(c2);c1.operator/(c2);c1.operator%(c2);c1.operator==(c2);c1.operator<(c2);c1.operator>(c2);c1.operator&&(c2);c1.operator||(c2);!(c1);++(c1);--(c1);(c1)++;(c1)--;c1.show();return 0;
}

实现效果

知识点思维导图

相关文章:

C++类的运算符重载

目标 让自定义的类直接使用运算符运算 代码 头文件及类定义 #include <iostream>using namespace std; class Complex {int rel;int vir; public:void show(){cout <<"("<<this->rel<<","<<this->vir<<&quo…...

泷羽Sec学习笔记-zmap搭建炮台

zmap搭建炮台 zmap扫描环境&#xff1a;kali-linux 先更新软件库 sudo apt update 下载zmap sudo apt install zmap 开始扫描(需要root权限) sudo zmap -p 80 -o raw_ips.txt 代码解析&#xff1a; sudo&#xff1a;以超级用户&#xff08;管理员&#xff09;权限运行…...

分析M0G突破后急剧下跌内因,x.game阐述不利面延续多久

MOG最新消息显示&#xff0c;美国唐纳德-的一则声明公开表示支持一种基于以太坊网络ERC-20代币标准的病毒式meme代币——Mog Coin&#xff08;MOG&#xff09;&#xff0c;这一消息迅速发酵。然而&#xff0c;令人意想不到的是&#xff0c;在这位全球知名政治人物的背书之后&am…...

网络爬虫全解析

一、网络爬虫基础要点 &#xff08;一&#xff09;爬虫原理 目标确定&#xff1a;明确需要抓取数据的网站或网页范围&#xff0c;例如针对特定电商平台抓取商品信息&#xff0c;或聚焦新闻网站获取新闻报道内容&#xff0c;要考量数据的价值与用途。URL 解析&#xff1a;理解网…...

《孤岛惊魂4》无法启动提示缺少“msvcp100.dll”快速修复方法!

《孤岛惊魂4》缺少msvcp100.dll的解决之道 在探索《孤岛惊魂4》这款充满惊险与刺激的射击游戏时&#xff0c;玩家可能会遇到一些意外的障碍&#xff0c;其中之一便是“缺少msvcp100.dll”的错误提示。这个错误不仅让游戏无法正常启动&#xff0c;还可能让玩家对游戏的热情大打…...

GS-SLAM论文阅读--RGBDS-SLAM

前言 最近GS-SLAM领域的工作层出不穷&#xff0c;有很多不错的工作出现。接下来慢慢写一下相关博客。 文章目录 前言1.背景介绍2.关键内容2.1 3D多层次金字塔高斯喷溅2.2 紧密耦合多特征重构优化2.3总体流程 3.文章贡献4.个人思考 1.背景介绍 高保真重建是密集SLAM的关键。最…...

条件编译->enable_if和 if constexpr使用区别

enable_if 和 if constexpr 是 C 中用于控制编译或运行时条件的重要工具&#xff0c;它们各有不同的用途和使用场景。以下是它们的主要区别&#xff1a; 1. enable_if std::enable_if 是一个类型特征&#xff0c;用于在编译时根据条件选择类型。常用于模板元编程&#xff0c;…...

介绍一下CSS中伪类和伪元素的概念

一、伪类&#xff08;Pseudo - Classes&#xff09; 1. 定义 伪类是添加到选择器的关键字&#xff0c;用于定义元素的特殊状态。这些状态不是由文档树中的结构或属性来表示&#xff0c;而是基于用户行为&#xff08;如鼠标悬停&#xff09;、元素状态&#xff08;如被选中&am…...

【橘子ES】熔断器Circuit breaker

一、相关概念 我们在日常的开发中&#xff0c;关于服务之间的熔断操作似乎很常见&#xff0c;当请求超过了我们服务所认为可以承受的一个上限阈值的时候&#xff0c;我们为了保护服务不会被进一步的高负载压崩溃&#xff0c;我们有时候会选择熔断请求&#xff0c;此时服务不再…...

6.4 CPU性能分析--Intel处理器跟踪技术

Intel处理器跟踪PT技术是记录程序执行过程的技术&#xff0c;它把记录信息编码报文存到高压缩率的二进制文件中。该二进制文件结合每条指令的时间戳重建执行流。PT技术覆盖度大&#xff0c;开销小&#xff0c;有关开销的信息详见&#xff0c;主要用于性能问题的事后分析和根因定…...

期权懂|如何用第三方平台开通期权?

期权小懂每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 如何用第三方平台开通期权&#xff1f; 如果不能满足常规的期权开户条件&#xff0c;可以考虑以下几种方法来尝试开户&#xff1a; 一、选择第三方平台&#xff1a; 通过网络搜…...

JS中const有没有变量提升

在JavaScript中&#xff0c;const 关键字用于声明一个只读的常量&#xff0c;其值在初始化后不能被重新赋值。关于变量提升&#xff08;Hoisting&#xff09;&#xff0c;它是JavaScript中一个重要的概念&#xff0c;指的是无论变量或函数声明在何处&#xff0c;它们都会被“提…...

Axure RP全面介绍:功能、应用与中文替代方案

Axure RP是一款功能强大的原型设计工具&#xff0c;它被广泛应用于网页和移动应用的设计领域。Axure RP集成了设计、原型制作和文档管理&#xff0c;为产品管理人员、设计师和开发人员提供了一个综合的平台。让我们一步步了解Axure的基本功能、使用技巧以及中文支持平台——“在…...

WordPress用户首次登录强制修改密码

有些企业网站要求很高&#xff0c;比如用户首次登录强制要求修改密码&#xff0c;这里提供一段代码&#xff0c;用于实现强制修改密码供参考。 通过代码可以实现&#xff0c;用户正常注册或者管理员在后台添加用户时&#xff0c;会添加首次登录标记&#xff0c;用户首次登录后会…...

AI开源南京分享会回顾录

AI 开源南京分享会&#xff0c;已于2024年11月30日下午在国浩律师&#xff08;南京&#xff09;事务所5楼会议厅成功举办。此次活动由 KCC南京、PowerData、RISC-Verse 联合主办&#xff0c;国浩律师&#xff08;南京&#xff09;事务所协办。 活动以“开源视角的 AI 对话”为主…...

基于事件驱动的websocket简单实现

websocket的实现 什么是websocket&#xff1f; WebSocket 是一种网络通信协议&#xff0c;旨在为客户端和服务器之间提供全双工、实时的通信通道。它是在 HTML5 规范中引入的&#xff0c;可以让浏览器与服务器进行持久化连接&#xff0c;以便实现低延迟的数据交换。 WebSock…...

【leetcode100】反转链表

1、题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 2、初始思路 2.1 思路 # Definition for singly-linked list. # class ListNode: # …...

禅道Bug的一次迁移

一、场景 平时工作记录在公司禅道上的问题想备份一份到本地&#xff0c;但是又没有公司禅道的数据库信息&#xff0c;有时候出测试报告想批量调整数据方便截图很困难&#xff0c;同时也为了学习禅道数据流转过程&#xff0c;所以有了把缺陷保存到本地一份的想法。 实际上禅道支…...

c段和旁站讲解(附查询网址)

1. C段&#xff08;C类子网段&#xff09; C段就是一个IP地址的小范围。比如&#xff0c;假设你有一个家庭Wi-Fi网络&#xff0c;Wi-Fi会分配给你一组IP地址&#xff08;每个设备一个IP地址&#xff09;。如果你的网络分配的是类似 192.168.1.0 这样的IP地址&#xff0c;那么这…...

Linux编译Kernel时的文件zImage、文件dtb(dtbs)、核心模块分别是什么东西?

zImage文件的介绍 在编译Linux内核时&#xff0c;zImage 是一种内核映像文件&#xff0c;它是内核的压缩版本&#xff0c;通常用于引导嵌入式设备或其他资源有限的环境。 zImage 的具体含义 zImage 是 “Compressed Kernel Image” 的缩写。它是通过压缩原始的内核映像&…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...