C++|运算符重载(1)|为什么要进行运算符重载
写在前面
本篇里面的日期类型加法,先不考虑闰年,平年的天数,每月的天数统一按30天算,那么每一年也就是360天
目录
写在前面
定义
基本数据类型
自定义数据类型
成员函数解决相加问题
Date类+整形
下一篇----运算符重载的规则
定义
运算符重载是对已有的运算符进行重新定义,赋予另一种功能,以适应不同的数据类型。
基本数据类型
例如“+”,对于整形,浮点型进行加法运算,如下的程序段:
int a=2,b=3,c;
c=a+b;//c=5
double x=2.5,y=4.3,z;
z=x+y;//z=6.8
对于这段代码,为什么同一个运算符“+”可以运用于不同类型的数据进行加法运算呢?
这是因为C++已经对运算符“+”进行的运算符重载。所以“+”运算符才可以适用于整形,浮点型数据的加法运算。
在上面的程序中,如果运算符“+”两边是整形,那么编译器就会调用执行整形加法的运算符“+”重载函数;同样,如果运算符“+”两边是浮点型,那么编译器就会调用执行浮点型的运算符“+”重载函数;如果运算符两边是一个整形一个浮点型进行运算,我们知道结果肯定是一个浮点型(偏向精度高的),那么编译器是怎么 编译的,首先编译器会调用一个特殊的函数,把整形数据转为 浮点型数据,然后调用执行浮点型的运算符“+”的重载函数。
自定义数据类型
C++中预定义的运算符操作对象只能是基本数据类型。实际上,对于我们自定义的类型(类),也需要进行类似的操作运算,可以直接用“+”来加减;
例如:对于日期这个类, 我想要直接知道当前日期加上n天之后,是何年何月何日。
下面是一个关于日期的类:
#include<iostream>
using namespace std;
class Date
{
public:Date(){Year = 1;Month = 1;Day = 1;}Date(int year,int month,int day){Year = year;Month = month;Day = day;}void DatePrint(){cout << Year << '/' << Month << '/' << Day << endl;}
private:int Year;int Month;int Day;
};int main()
{Date d1(2024, 4, 15);//Date d2 = d1+6;//4月21日d1.DatePrint();//2024/4/15//d2.DatePrint();return 0;
}
若要给d加上6,是不能实现的,不能实现的原因是,运算符“+”一个是整形,另一个是Date类,Date类不是预定义的基本数据类型。
如果需要对Date类进行加法运算,我们可以运用成员函数的方法来解决这个问题,每次相加的时候调用对应函数,相加就可以得到想要的结果。
成员函数解决相加问题
Date类+整形
也就是我们想要知道当前日期几天是何年何月何日,整形代表一个天数,直接加到Day上,
Day超过30,Month加1,Day减30,
Month超过12,Year加1,Month减12
代码结果如下
#include<iostream>
using namespace std;
class Date
{
public:Date(){Year = 1;Month = 1;Day = 1;}Date(int year,int month,int day){Year = year;Month = month;Day = day;}void DatePrint(){cout << Year << '/' << Month << '/' << Day << endl;}Date Addint(int day){int month = 0,year=0;year = day/360;//加的天数里面有多少年day = day % 360;//把年减了之后有多少天month = day / 30;//剩下的天数里面有多少个月day %= 30;//把月减了之后有多少天Year += year;Month += month;Day += day;return *this;}
private:int Year;int Month;int Day;
};int main()
{Date d1(2024, 4, 15);cout << "相加之前d1:";d1.DatePrint();//2024/4/15d1.Addint(6);//4月21日cout << "相加之后d1:";d1.DatePrint();return 0;
}
运行结果如下:

在来一个例子吧,算一下2000天后是多少年几月几号(注意这里没有使用日期规则)

这样也可以实现相加,但是我们也希望可以在类中使用运算符("+","-","=="...)
d2=d1+6,这样就需要重载运算符“+”来解决。
下一篇----运算符重载的规则
我们在介绍怎么使用运算符重载
相关文章:
C++|运算符重载(1)|为什么要进行运算符重载
写在前面 本篇里面的日期类型加法,先不考虑闰年,平年的天数,每月的天数统一按30天算,那么每一年也就是360天 目录 写在前面 定义 基本数据类型 自定义数据类型 成员函数解决相加问题 Date类+整形 下一篇----运…...
【ARM 裸机】汇编 led 驱动之烧写 bin 文件
1、烧写概念 bin 文件烧写到哪里呢?使用 STM32 的时候烧写到内部 FLASH,6ULL 没有内部 FLASH,是不是就不能烧写呢?不,6ULL 支持 SD卡、EMMC、NAND FLASH、NOR FLASH 等方式启动,在裸机学习的工程中&#x…...
计算机网络之CIDR
快速了解CIDR CIDR 表示的是什么? 单个IP地址:当你看到一个CIDR表示法,如192.168.1.1/32,它表示一个单独的具体IP地址。/32表示所有32位都是网络部分,没有主机部分,因此它指的是单一的IP地址。 一个IP地址…...
【无标题】系统思考—智慧共赢座谈会
第432期JSTO—“智慧共赢座谈会”精彩回顾 我们身处一个快速变化的世界,其中培训和咨询行业也不断面临新的挑战和机遇。为了紧跟这些变革,我们邀请了行业专家与合作伙伴深入探讨在培训、交付和销售过程中遇到的难题。 本次座谈会的亮点之一是我们科学上…...
【Linux C | 多线程编程】线程同步 | 互斥量(互斥锁)介绍和使用
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰: 本文未经允许…...
mid_360建图和定位
录制数据 roslaunch livox_ros_driver2 msg_MID360.launch使用fast-lio 建图 https://github.com/hku-mars/FAST_LIO.git 建图效果 使用python做显示 https://gitee.com/linjiey11/mid360/blob/master/show_pcd.py 使用 point_lio建图 https://github.com/hku-mars/Point…...
ThreadX在STM32上的移植:通用启动文件tx_initialize_low_level.s
在嵌入式系统开发中,实时操作系统(RTOS)的选择对于系统性能和稳定性至关重要。ThreadX是一种广泛使用的RTOS,它以其小巧、快速和可靠而闻名。在本文中,我们将探讨如何将ThreadX移植到STM32微控制器上,特别是…...
【python实战】游戏开发——恐龙跳跃小游戏
目录 背景开发环境步骤初步搭建主窗口的实现地平线滑动场景小恐龙跳跃障碍物出现碰撞检测和积分功能优化改为随时可以跳跃源码参考背景 小恐龙沿着地平线前进,遇到障碍物跳跃,躲避障碍物。根据躲避的障碍物进行积分统计。 开发环境 开发环境:Windows10 软件:pycharm 开发…...
成都百洲文化传媒有限公司电商领域的新锐力量
在电商服务领域,成都百洲文化传媒有限公司凭借其专业的服务理念和创新的策略,正逐渐成为行业内的翘楚。这家公司不仅拥有资深的电商团队,还以其精准的市场定位和高效的服务模式,赢得了众多客户的信赖和好评。 一、专业团队&#…...
1042: 中缀表达式转换为后缀表达式
解法:直接给算法 创建一个栈和一个空的后缀表达式字符串。 遍历中缀表达式中的每个字符。 如果当前字符是操作数,直接将其添加到后缀表达式字符串中。 如果当前字符是操作符,需要将其与栈顶的操作符进行比较: 如果栈为空&#…...
避免上下文切换--Linux原子函数
在现代操作系统中,原子函数是一类特殊的函数,它们能够保证在并发环境中执行的操作是不可分割的。这意味着一旦一个原子函数开始执行,它的操作会在任何其他线程或进程可以介入之前完全完成。这是通过多种机制实现的,包括硬件支持的…...
塔面板php7.37.4版本不支持ZipArchive手工安装扩展方法
centos 7 宝塔面板安装的PHP7.3和7.4默认已经不带zip扩展,要手工安装zip扩展首先需要安装libzip, yum -y install libzip 方法如下: 宝塔面板php7.3版本在SSH命令行界面执行以下语句: cd /www/server/php/73/src/ext/zip/ /ww…...
go语言并发实战——日志收集系统(一) 项目前言
-goroutine- 简介 go并发编程的练手项目 项目背景 一般来说业务系统都有自己的日志,当系统出现问题时,我们一般需要通过日志信息来定位与解决问题,当系统机器较少时我们可以登录服务器来查看,但是当系统机器较多时,我们通过服务器来查看日志的成本就会变得很大,…...
Android Studio 之 Intent及其参数传递
一、Intent 显式Intent:通过组件名指定启动的目标组件,比如startActivity(new Intent(A.this,B.class)); 每次启动的组件只有一个~隐式Intent:不指定组件名,而指定Intent的Action,Data,或Category,当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-…...
【黑马头条】-day06自媒体文章上下架-Kafka
文章目录 今日内容1 Kafka1.1 消息中间件对比1.2 kafka介绍1.3 kafka安装及配置1.4 kafka案例1.4.1 导入kafka客户端1.4.2 编写生产者消费者1.4.3 启动测试1.4.4 多消费者启动 1.5 kafka分区机制1.5.1 topic剖析 1.6 kafka高可用设计1.7 kafka生产者详解1.7.1 同步发送1.7.2 异…...
非线性特征曲线线性化插补器(CODESYS 完整ST代码)
1、如何利用博途PLC和信捷PLC实现非线性特征曲线的线性化可以参考下面文章链接: 非线性特征曲线线性化(插补功能块SCL源代码+C代码)_scl直线插补程序-CSDN博客文章浏览阅读382次。信捷PLC压力闭环控制应用(C语言完整PD、PID源代码)_RXXW_Dor的博客-CSDN博客闭环控制的系列文章…...
vue3从精通到入门4:diff算法的实现
Vue 3 的 diff 算法相较于 Vue 2 有了一些改进和优化,主要是为了应对更复杂的组件结构和更高的性能需求。 以下是 Vue 3 diff 算法在处理列表更新时的大致步骤: 头头比较:首先,比较新旧列表的头节点(即第一个节点&…...
(三)C++自制植物大战僵尸游戏项目结构说明
植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/ErelL 一、项目结构 打开项目后,在解决方案管理器中有五个项目,分别是libbox2d、libcocos2d、librecast、libSpine、PlantsVsZombies五个项目,除PlantsVsZombies外,其他四个…...
动态规划专练( 279.完全平方数)
279.完全平方数 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 …...
京东商品详情API接口(商品属性丨sku价格丨详情图丨标题等数据)
京东商品详情API接口是京东开放平台提供的一种API接口,通过调用该接口,开发者可以获取京东商品的标题、价格、库存、月销量、总销量、详情描述、图片等详细信息。下面针对您提到的商品属性、SKU价格、详情图以及标题等数据,做具体介绍&#x…...
网络虚拟化如何应对100G性能挑战:从SDN/NFV到DPDK与智能网卡的演进
1. 网络虚拟化与100G浪潮:一场正在发生的架构革命如果你在2015年前后从事网络或云计算相关的工作,大概会对一个词印象深刻:100G。当时,行业媒体和厂商都在热烈讨论一个预测——到2018年,100G将成为网络设备,…...
【DSP学习】外部中断实验-基于普中DSP28335开发攻略
参考材料 普中DSP28335开发攻略 一、外部中断配置 1 失能 CPU 级中断,并初始化 PIE 控制器寄存器和 PIE 中断向量表在前面学习中断章节中,我们知道 F28335 的外设中断需通过 PIE 控制器来管理,因此需要初始化 PIE 相应的寄存器和中断向量表。…...
浏览器扩展开发实战:KeepChatGPT会话保持原理与实现
1. 项目概述:一个浏览器扩展的诞生与使命 最近在和一些做AI应用开发的朋友交流时,大家普遍反映了一个痛点:在使用一些大型语言模型(LLM)的在线服务时,对话经常会被意外中断。这种中断可能源于网络波动、服…...
5 月 8 日 AIoT 双标落地,中国智能基础设施建设开启十年竞速!
AIoT 产业里程碑:5 月 8 日双标落地2026 年 5 月 8 日,注定会被写进中国 AIoT 产业的发展史。多个国家级部委在同一天落下两枚关乎未来十年的战略锚点。第一枚,是国家网信办、国家发展改革委、工业和信息化部联合印发的 《智能体规范应用与创…...
5分钟搞定Windows激活:KMS_VL_ALL_AIO一键激活全指南
5分钟搞定Windows激活:KMS_VL_ALL_AIO一键激活全指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否刚重装完系统,面对"Windows未激活"的提示感到头疼&…...
给每个 Agent 装上专属工具集:Multi-Agent 权限隔离的三种设计模式一次讲透
我第一次写多 Agent 系统时犯过一个错误:把所有工具塞进一个 tools 数组,然后把这个数组挂给每个 Agent。结果上线后发现:负责写文章摘要的 Agent,有时候莫名其妙地调用了删除接口;负责检索资料的 Agent,偶…...
原来Ilya还有70亿美元OpenAI股权
鹭羽 发自 凹非寺量子位 | 公众号 QbitAI马斯克 VS 奥特曼的世纪庭审,也太劲爆了——感觉自己像是瓜田里的猹,一瓜未平一瓜又起。吃不过来,根本吃不过来……这不,就在刚刚,OpenAI的造富神话被「一不小心」炸了出来。Op…...
TrguiNG汉化版:三招彻底改变你的Transmission远程管理体验
TrguiNG汉化版:三招彻底改变你的Transmission远程管理体验 【免费下载链接】TrguiNG Transmission WebUI 基于 openscopeproject/TrguiNG 汉化和改进 项目地址: https://gitcode.com/gh_mirrors/tr/TrguiNG 你是否还在忍受Transmission原生的简陋Web界面&…...
实战指南:VRM-Addon-for-Blender 终极VRM格式导入导出解决方案
实战指南:VRM-Addon-for-Blender 终极VRM格式导入导出解决方案 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.1 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender VRM(…...
Ubuntu 20.04黑屏救星:手把手教你用tty2命令行重装NVIDIA驱动(附内核更新关闭指南)
Ubuntu 20.04黑屏救援实战:从tty2命令行到图形界面恢复全指南 当你满心欢喜地启动Ubuntu 20.04,准备开始一天的工作时,迎接你的却是一片漆黑——这是许多Linux用户都曾遭遇过的噩梦场景。NVIDIA驱动问题导致的系统黑屏不仅令人沮丧࿰…...
