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

C++ 关于类与对象(中篇)一篇详解!(运算符重载)

赋值运算符重载

运算符重载

C++ 为了 增强代码的可读性 引入了运算符重载 运算符重载是具有特殊函数名的函数 ,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
函数名字为:关键字 operator 后面接需要重载的运算符符号
函数原型: 返回值类型  operator 操作符 ( 参数列表 )
注意:
1.不能通过连接其他符号来创建新的操作符:比如 operator@
2.重载操作符必须有一个类类型参数,就是至少有一个参数是 自定义类型。
3.用于内置类型的运算符,其含义不能改变,例如:内置的整型 + ,不能改变其含义
4.作为类成员函数重载时,其 形参看起来比操作数数目少1 ,因为成员函数的第一个参数为 隐藏的this
5.  .*    ::   sizeof    ?:    .   注意以上 5 个运算符不能重载。
6.不能改变操作符的操作数个数,一个操作符有几个操作数在重载的时候就要有几个参数
// 全局的operator==
class Date
{ 
public:Date(int year = 1900, int month = 1, int day = 1){_year = year;_month = month;_day = day;}    
//private:int _year;int _month;int _day;
};bool operator==(const Date& d1, const Date& d2)
{return d1._year == d2._year&& d1._month == d2._month&& d1._day == d2._day;
}
void Test ()
{Date d1(2018, 9, 26);Date d2(2018, 9, 27);cout<<(d1 == d2)<<endl;
}
class Date
{ 
public:Date(int year = 1900, int month = 1, int day = 1)
{_year = year;_month = month;_day = day;}bool operator==(Date* this, const Date& d2)这里需要注意的是,左操作数是this,指向调用函数的对象bool operator==(const Date& d2){return _year == d2._year;&& _month == d2._month&& _day == d2._day;}
private:int _year;int _month;int _day;
};

比较年月日时间大小

DATE

日期类运算符重载

#include<iostream>
#include<assert.h>
using namespace std;class Date
{
public:Date(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}void Print(){cout << _year << "/" << _month << "/" << _day << endl;}// d1 < d2  左操作数就是第一个参数,右操作数就是第二个参数,参数顺序不能换// 相当于下面的比较// d1.operator<(d2)     d1就是this ,d2就是d,不能换顺序bool operator<(const Date& d){if (_year < d._year){return true;}else if (_year == d._year && _month < d._month){return true;}else if (_year == d._year && _month == d._month && _day < d._day){return true;}else{return false;}}bool operator==(const Date& d){return _year == d._year&& _month == d._month&& _day == d._day;}// d1 <= d2bool operator<=(const Date& d){return *this < d || *this == d;}bool operator>(const Date& d){return !(*this <= d);}bool operator>=(const Date& d){return !(*this < d);}bool operator!=(const Date& d){return !(*this == d);}int GetMonthDay(int year, int month){int monthArray[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };if (month == 2&& ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))){return 29;}return monthArray[month];}Date& operator+=(int day){_day += day;while (_day > GetMonthDay(_year, _month)){// 月进位_day -= GetMonthDay(_year, _month);++_month;// 月满了if (_month == 13){++_year;_month = 1;}}return *this;}Date operator+(int day){Date tmp(*this);tmp += day;return tmp;//tmp._day += day;//while (tmp._day > GetMonthDay(tmp._year, tmp._month))//{//	// 月进位//	tmp._day -= GetMonthDay(tmp._year, tmp._month);//	++_month;//	// 月满了//	if (tmp._month == 13)//	{//		++tmp._year;//		tmp._month = 1;//	}//}//return tmp;}private:// 内置类型int _year;int _month;int _day;
};int main()
{Date d1(2023, 7, 21);Date d2(2022, 8, 21);//这里只有两个操作数所以只能写两个参数cout << (d1 < d2) << endl;   // cout << (d1.operator<(d2)) << endl;cout << (d1 == d2) << endl;/*Date ret = d1 += 50;ret.Print();d1.Print()*/Date ret = d1 + 50;ret.Print();d1.Print();return 0;
}

相关文章:

C++ 关于类与对象(中篇)一篇详解!(运算符重载)

赋值运算符重载 运算符重载 C 为了 增强代码的可读性 引入了运算符重载 &#xff0c; 运算符重载是具有特殊函数名的函数 &#xff0c;也具有其返回值类型&#xff0c;函数名字以及参数列表&#xff0c;其返回值类型与参数列表与普通的函数类似。 函数名字为&#xff1a;关键…...

Scala的set

//Set的特点&#xff1a;唯一&#xff08;元素不相同&#xff09;&#xff1b;无序 case class Book(var bookName:String,var author:String,var price:Double){} object test27 {def main(args: Array[String]): Unit {//定义一个可变setval set1 scala.collection.mutable…...

Linux---常用shell脚本

目录 一.网络服务 开启network服务 网口IP配置 聚合口配置 前言 秋招拿到了科大讯飞的offer&#xff0c;可是由于某些原因无法完成三方签署&#xff0c;心情还是比较失落的&#xff0c;或许写一篇技术博客&#xff0c;活跃一下大脑思维也是一种不错的放松方式。 一.网络服务 …...

windows二进制安全零基础(二)

文章目录 栈&#xff08;The Stack&#xff09;调用约定&#xff08;Calling Conventions&#xff09;函数返回机制 在x86架构中&#xff0c;栈&#xff08;Stack&#xff09;是一个非常重要的内存区域&#xff0c;它用于支持线程的短期数据需求&#xff0c;如函数调用、局部变…...

git常用命令+搭vscode使用

1.克隆远程代码 git clone http:xxx git clone ssh:xxx clone的url 中 https和 ssh是有区别的: git中SSH和HTTP连接有什么区别-CSDN博客 当然https拉下来的代码每次pull /push都需要验证一次自己的账户和密码,可以config进行配置不用每次手敲: 解决VScode中每次git pu…...

如何在C#中处理必盈接口返回的股票数据?

在必盈接口返回股票数据后&#xff0c;在 C# 中可通过以下步骤进行处理&#xff1a; 数据获取 使用 HttpWebRequest 或 HttpClient 类向必盈接口发送请求以获取数据。以 HttpWebRequest 为例&#xff0c;构建请求并发送&#xff0c;获取响应流后读取为字符串形式的 JSON 数据。…...

01 最舒适的python开发环境

0 前言 我自己经过尝试&#xff0c;总结出python3开发环境的最舒适方式。 python3安装创建虚拟环境 venvjupyter notebook 笔记本安装vscode插件(Python, Pylance, Jupyter) 1 python3安装 ubuntu系统下安装最新版本的python3 sudo apt update sudo apt install python32 …...

【PyTorch】libtorch_cpu.so: undefined symbol: iJIT_NotifyEvent

【PyTorch】libtorch_cpu.so: undefined symbol: iJIT_NotifyEvent 1 报错信息2 原因3 解决方法 1 报错信息 conda install pytorch1.13.1 torchaudio0.13.1 torchvision0.14.1 cudatoolkit11.7 -c pytorch在 conda 环境中安装 torch 后测试&#xff0c;得到下面的错误&#x…...

快速利用c语言实现线性表(lineList)

线性表是数据结构中最基本和简单的一个&#xff0c;它是n的相同类型数据的有序序列&#xff0c;我们也可以用c语言中的数组来理解线性表。 一、线性表声明 我们定义一个线性表的结构体&#xff0c;内部有三个元素&#xff1a;其中elem是一个指针&#xff0c;指向线性表的头&am…...

量子计算与人工智能的交汇:科技未来的新引擎

引言 在当今飞速发展的科技世界&#xff0c;人工智能&#xff08;AI&#xff09;和量子计算无疑是最受瞩目的两大前沿领域。人工智能凭借其在数据处理、模式识别以及自动化决策中的强大能力&#xff0c;已经成为推动各行业数字化转型的重要力量。而量子计算则通过颠覆传统计算机…...

51单片机使用NRF24L01进行2.4G无线通信

本文并不打算详细介绍NRF24L01的各个功能寄存器及指令的详细用法&#xff0c;因为网上都可以搜到很多非常详细的教程文档&#xff0c;这里只是介绍一些基本概念、用法以及代码的解释&#xff0c;旨在帮助新手能够快速上手调通快速使用。 基础概念 该模块使用的是SPI协议&…...

HelloMeme 上手即用教程

HelloMeme是一个集成空间编织注意力的扩散模型&#xff0c;用于生成高保真图像和视频。它提供了一个代码库&#xff0c;包含实验代码和预训练模型&#xff0c;支持PyTorch和FFmpeg。用户可以通过简单的命令行操作来生成图像和视频。 本文将详细介绍&#xff0c;如何在GPU算力租…...

自定义call方法和apply方法

自定义call方法 //Fn:要执行的函数&#xff0c;obj&#xff1a;函数中this的指向&#xff0c;args:剩余参数function call(Fn, obj, ...args) {//判断if (obj undefined || obj null) {obj globalThis; //全局对象 globalThis&#xff1a;es11新增的特性&#xff0c;用来指向…...

typescript中为js文件提供类型声明

案例&#xff1a;为JS文件提供类型声明 场景描述 假设我们有一个JavaScript文件 utils.js&#xff0c;其中包含一些实用工具函数和变量。为了在TypeScript中使用这些函数和变量并获得类型提示&#xff0c;我们可以使用 declare 关键词为它们提供类型声明。 1. 创建 JavaScri…...

ETH挖矿显卡超频信息汇总

NVIDIA 显卡 显卡型号 核心频率增减量 内存频率增减量 功耗墙(W) 预估算力(ethash算法) RTX 3090-3001000285W / 80%120 MH/sRTX 3080-150900220W / 68%98 MH/sRTX 3070-5001100130W / 60%60 MH/sRTX 3060 Ti-5001200130W / 65%60 MH/sRTX 2080 Ti-2001100150W /…...

调用 Xinference OpenAI接口时报错 Model not found in the model list, uid

错误如下, 请不要被错误吓住或蒙蔽双眼, 自己看最下面的报错内容 Traceback (most recent call last): File "C:\Users\HW\.conda\envs\aibot\Lib\site-packages\starlette\responses.py", line 259, in __call__ await wrap(partial(self.listen_for_disconn…...

一文说清:C静态库与动态库的区别

一 前言 大家在用C语言编程时&#xff0c;一定会遇到各种库&#xff0c;它们为开发者提供了大量的预编译函数和数据结构&#xff0c;从而极大地提高了软件开发的效率。 在C语言中&#xff0c;库主要分为两种类型&#xff1a; 静态库&#xff08;Static Library&#xff09;&…...

Mysql 5.7.6以上版本怎样关闭GTID(由GTID改为基于file,position方式)

平时不建议关闭GTID&#xff0c;假如开启GTID遇到问题&#xff0c;需要回退到基于file,position方式&#xff0c;则可以执行如下步骤&#xff1a; 1.在从库停止主从复制&#xff1a; STOP SLAVE; CHANGE MASTER TO MASTER_AUTO_POSITION 0; START SLAVE; SHOW SLAVE STAT…...

MATLAB常见数学运算函数

MATLAB中含有许多有用的函数,可以随时调用。 a b s abs abs函数 a b s abs abs函数在MATLAB中可以求绝对值,也可以求复数的模长:c e i l ceil ceil函数 向正无穷四舍五入(如果有小数,就向正方向进一)f l o o r floor floor函数 向负无穷四舍五入(如果有小数,就向负方向…...

设置Fusion360 - Prusa slicer -octoprint 一键打印流程

此流程可以直接从fusion360导出文件到prusa slicer切片&#xff0c;切片后可以一键上传并开始打印。以下操作在MacOS中进行&#xff0c;Windows也可以参考。 Fusion360中点击文件-3D打印 弹出对话框中点击应用程序&#xff0c;并在从我的计算机选择中选取Prusa Slicer的可执行…...

nlp_gte_sentence-embedding_chinese-large保姆级教程:免配置镜像启动+Web界面使用详解

nlp_gte_sentence-embedding_chinese-large保姆级教程&#xff1a;免配置镜像启动Web界面使用详解 你是不是经常遇到这样的问题&#xff1a;手里有一堆文档&#xff0c;想快速找到和某个问题最相关的内容&#xff0c;却只能靠关键词搜索&#xff0c;结果要么漏掉&#xff0c;要…...

DBNet++的ASF模块真的只是空间注意力吗?深入对比论文与官方代码的三种实现

DBNet的ASF模块&#xff1a;论文与代码的注意力机制差异深度解析 在文本检测领域&#xff0c;DBNet因其出色的性能和实时性成为工业界和学术界的热门选择。其核心创新之一——自适应尺度融合&#xff08;ASF&#xff09;模块&#xff0c;在论文中被描述为空间注意力机制&#x…...

教你把歌曲原声调小的5个技巧!简单又好用 赶紧收藏

在日常生活中&#xff0c;调整歌曲原声调小是非常常见的音频处理需求。比如在剪辑视频时&#xff0c;可能需要降低背景音乐的音量以突出旁白&#xff1b;或者在制作播客时&#xff0c;需要平衡人声与背景音的比例&#xff1b;还有在手机上听音乐时&#xff0c;某些歌曲突然出现…...

避开高光谱求导的坑:你的平滑做对了吗?附MATLAB代码与数据示例

高光谱微分预处理实战指南&#xff1a;如何避免噪声放大陷阱 第一次处理高光谱数据时&#xff0c;我兴奋地直接对原始光谱曲线求导&#xff0c;结果得到了一堆杂乱无章的噪声信号。这个教训让我明白了一个关键原则&#xff1a;未经平滑的微分操作就像在放大镜下观察指纹——细节…...

为什么纯向量 RAG 难以支撑长记忆?Graph RAG 的架构优势解析

前几天在调试一个企业级 Agent 时&#xff0c;遇到一个经典崩溃点&#xff1a;当用户问起“去年 10 月项目 A 失败的根本原因是什么”时&#xff0c;纯向量搜索&#xff08;Vector Search&#xff09;直接输出了几个毫不相关的会议纪要片段。 这是企业知识库问答中最常见的一类…...

虚拟内存 pagefile.sys 安全迁移教程|释放 3~8GB

摘要Windows 系统默认将虚拟内存&#xff08;pagefile.sys&#xff09;存放在 C 盘&#xff0c;长期占用 3~8GB 系统盘空间&#xff0c;不仅会加剧 C 盘爆满问题&#xff0c;还会增加磁盘读写压力&#xff0c;影响系统运行性能。本文整理 官方原生、安全无毒、无需第三方工具 的…...

7个技巧彻底改变你的Mac菜单栏体验:Ice终极配置指南

7个技巧彻底改变你的Mac菜单栏体验&#xff1a;Ice终极配置指南 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice Ice是一款强大的macOS菜单栏管理工具&#xff0c;专门帮助用户整理杂乱的菜单栏图标&…...

foobar2000 DUI界面深度解析:foobox-cn技术架构与实战配置完整指南

foobar2000 DUI界面深度解析&#xff1a;foobox-cn技术架构与实战配置完整指南 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobox-cn是针对foobar2000播放器开发的现代化DUI&#xff08;默认用户…...

RAG检索增强生成技术及应用

首先&#xff0c;是什么&#xff1f; RAG是模型生成回答前从指定知识库中精准抓取信息&#xff0c;再结合这些依据去生成内容&#xff0c;回答问题&#xff08;给一个学霸配备一个随身图书馆&#xff0c;方便随时查阅&#xff09; 核心就是&#xff1a;知识库&#xff08;存资料…...

不止于JWT:用FastAPI的Depends实现细粒度权限控制

&#x1f4cc; 本文摘要 很多FastAPI初学者把JWT认证当成权限控制的终点&#xff0c;结果上线后频繁出现越权操作。本文通过一个真实的“多租户Todo”案例&#xff0c;带你从0搭建基于角色的访问控制&#xff08;RBAC&#xff09;和数据级权限&#xff08;ABAC&#xff09;&…...