C++初阶-----对运算符重载的进一步理解(2)

目录

1.对于加加,减减运算符的重载理解

2.const修饰的一些事情

3.日期对象之间的减法实现逻辑


1.对于加加,减减运算符的重载理解

(1)在C语言里面,我们已经知道并且了解加加,减减的一些基本的用法,前置加加,后置加加,前置减减,后置减减的区别以及应用,我们已经接触的比较多了;

(2)在C++里面,对于类里面的对象,我们肯定是无法直接使用这些运算符的,因为这些类和对象都属于自定义类型,我们的加加减减针对的是内置类型,例如针对一个日期类,我们想要使用2024年4月28日的加加操作,这个肯定要使用加加运算符,但是编译器不认识啊,我们需要对这个运算符进行重载;

(3)首先我们要明确一点,出了作用域,如果存在的话,我们可以使用传引用返回,出了作用域,如果不存在的话,我们就要使用传值返回就可以;

(4)我们知道加加存在前置和后置,下面展示的是前置加加,我们这里的加等昨天已经实现了(可以去看我昨天的博客),我们在这里可以直接使用,否则我们是无法直接使用这个运算符的;

(5)在主函数里面,我们是调用的d1这个对象,使之进行加价的操作,我们使用相同的类创建的对象ret进行接收,最后打印就可以了;实现的过程中,我们是使用了this指针,这个指针在参数里面是隐式存在的,但是我们在函数里面可以使用,因为出了作用域,我们的this指针还是存在的,因此我们可以使用传引用返回的方式,最后的打印结果就是4月30号;

(6)接下来的是后置加加,我们的前置后置参数的差别不大,但是为了加以区分两者,我们的祖师爷在后置加加的运算符重载里面加入了一个参数,这个参数可以是任意的(这个参数就是为了加以区分,而且是规定的),这样我们使用拷贝函数把我们的日期拷贝给temp这个临时的变量,但是出了作用域,这个变量就销毁了,所以我们不能使用传引用返回,使用传值返回就可以了,因为是后置加加,所以我们的打印结果并不会变,但是实际上肯定是加一了的,我们可以使用调试进行观察变化的情况;

(7)前置减减和后置减减的逻辑基本相同:就是符号变了,这里的减等也是需要提前实现的,只有提前实现这里才可以进行使用,重载如下;相信理解加加的你不难理解减减的重载,其实本质都是一样的。

2.const修饰的一些事情

下面的这个现象可能你并没有尝试过,但是他是确实存在的,我们来介绍一个这个现象的原因和对应的解决策略:

(1)现象就是上面的图片里面展示的那样,我们如果在定义对象的时候在前面加上const,我们使用d1.print进行打印的时候就会报错,这个是为何呢?

(2)这个就和我们的print函数有关了,这个里面涉及权限的问题,我们定义d1时候是const类型,print函数里面的参数就是date类型的,这个里面就涉及到权限的放大,

我们想要解决这个问题,只需要在函数的后面加上const就可以了,虽然这个const在括号的后面,实际上他修饰的是里面的参数this指针,这样就相当于是权限的平移,就不会报错了;

就算我们定义d1的时候,没有加const,这个函数print后面的const也是可以写上去的,因为我们普通定义的d1到const修饰的参数相当于是权限的缩小,这个也是不会报错的。

3.日期对象之间的减法实现逻辑

我们这里是用两个日期进行相应的运算的,我们想要计算两个日期之间的差的天数,这个是后年直接进行减法显然是不行的,因为d1和d2都属于自定义的类型,编译器只认识内置的类型;

(2)我们这里只写了一个参数,但是实际上是有2个参数的,因为还有一个隐藏的this指针,this指针代表的就是第一个日期,temp接受的就是第二个日期,无论大小,我们进行对应的赋值(第一个赋值给max,第二个赋值给min),然后我们进行比较如果第一个大于第二个,我们直接设置一个n,让这个min不断地++,最后当min和max相等的时候,我们就得到了相差的天数;如果d1<d2那么相减之后的就是负数,我们需要重新赋值,然后把我们的flag设置为-1就可以了;

(3)实际上,为什么我们的这个min加到一个月的最后一天会自动走向下一个月,不知道你是否明白?

实际上,我们昨天实现的+=这个运算符的重载就已经进行定义了月份的天数的相关问题,

我们在实现这个日期之间的差值计算的时候,我们使用到了++(无论是前置还是后置),++函数里面都是用到了+=的,相当于我们+=实现了之后,在++里面进行了使用,++这个运算符重载就知道月份加到某一天走向下一个月份,我们的计算日期之间的差值-这个运算符有用到了++这个运算符,所以这个-运算符从在里面也是知道这个月份加到哪一天进行进位的;

(4)由此可见,我们只需要定义一次日期的月份之间的天数设置,在不同函数里面只有使用到对应的重载符号,这个月份天数是知道加到那一天的,都是通用的,不知道讲到这里你是否明白。

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

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

相关文章

【软件开发规范篇】JAVA后端开发编码命名规范

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

HTML+CSS:构建网站不可不知的18个模块!

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具…

virtualbox 网络设置实现主机和虚拟机互相访问

前言 一般来说&#xff0c;virtualbox 虚拟机的上网模式是 NAT。这样虚拟机可以上网并访问宿主机&#xff0c;但宿主机无法访问虚拟机&#xff0c;也无法 ping 通。下面介绍双网卡模式&#xff0c;实现虚拟机和宿主机能够互相访问 ping 通。 双网卡模式 进入虚拟机的网络设置…

贪心算法在找零问题中的应用

贪心算法在找零问题中的应用 引言a. 贪心算法求解找零问题算法设计算法证明 b. 硬币面额为c的幂时的贪心算法证明算法设计算法证明 c. 设计使贪心算法失效的硬币面额组合d. 通用找零算法设计算法设计算法实现&#xff08;伪代码&#xff09;算法实现&#xff08;C代码&#xff…

基于SpringBoot和PostGIS的各省与地级市空间距离分析

目录 前言 一、PostGIS时空库 1、时空表设计 2、空间数据管理与查询 二、后台接口设计 1、ORM层设计与实现 2、业务层设计与实现 3、控制层设计 三、web可视化设计与实现 1、省份范围展示 2、城市距离可视化 3、成果展示 总结 前言 在上一篇博客中基于Java和GDAL实…

充电桩选型对比:ESP32-S3模组和ESP32-C3模组谁更合适

随着新能源电车的普及&#xff0c;全国各地和海外都开始加紧安装充电桩&#xff0c;运城到2025年年底,实现充电桩城镇居住小区全覆盖&#xff0c;截至今年3月底,泉州市新增充电桩居民报装1.68万户。 启明云端是国内领先的物联网通讯产品和整体解决方案供应商&#xff0c;有非常…

Gromacs——教程学习(6)

谈谈怎么判断分子动力学模拟是否达到了平衡 在计算RMSD之前必须先通过最小二乘法将各帧结构相对于参考结构进行最大程度叠合&#xff0c;从而消除体系的整体运动而令RMSD只体现生物分子内部结构的变化&#xff0c;这称为align或者least squares fit。 需要注意的是&#xff0…

国产Sora诞生!清华团队发布Vidu大模型,可直接生成16秒视频

大模型之争已从单模态转向多模态。 4月27日&#xff0c;在2024中关村论坛年会未来人工智能先锋论坛上&#xff0c;清华大学联合北京生数科技有限公司正式发布了文生视频大模型——Vidu。 在会议上&#xff0c;清华大学人工智能研究院副院长、生数科技首席科学家朱军对外展示了…

stack,queue的模拟实现以及优先级队列

这篇博客用来记录stack&#xff0c;queue的学习。 stack的模拟实现 stack的模拟实现比较简单&#xff0c;先上代码 #pragma once #include<vector> #include<list> #include<deque> #include<iostream> using std::deque; using namespace std;name…

PyTorch中Torch.arange()函数详解

函数原型 arange(start0, end, step1, *, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse) -> Tensor 用法 返回大小为的一维张量&#xff0c;其值介于区间 为步长等间隔取值 参数说明 参数类型说明startNumber起始值&#xff0c;默认值&…

【Python的魅力】:利用Pygame实现游戏坦克大战——含完整源码

文章目录 一、游戏运行效果二、代码实现2.1 项目搭建2.2 加载我方坦克2.3 加载敌方坦克2.4 添加爆炸效果2.5 坦克大战之音效处理 三、完整代码 一、游戏运行效果 二、代码实现 坦克大战游戏 2.1 项目搭建 本游戏主要分为两个对象&#xff0c;分别是我方坦克和敌方坦克。用户可…

告别盲目投放,Xinstall让App广告效果一目了然

在移动互联网时代&#xff0c;App广告的投放已经成为企业营销的重要手段。然而&#xff0c;广告主在投放广告后&#xff0c;如何有效追踪广告效果、衡量广告ROI&#xff0c;一直是困扰他们的难题。今天&#xff0c;我们就来聊聊Xinstall这家国内专业的App全渠道统计服务商&…

计算一个结构的平方

在行列可自由变换的平面上计算3a1*3a1 得到的结构应该有9个点&#xff0c;并且点的分布有3a1的特征 这个9点结构可以化简成 1 1 1 1 1 1 1 1 1 显然这个结构可以再次平方&#xff0c;得到 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 …

python:reportlab 生成pdf:基本用法。

1.首先&#xff0c;打开cmd&#xff0c;安装reportlab pip install -i https://pypi.tuna.tsinghua.edu.cn/simple reportlab #从清华镜像安装更快 然后就可以使用其基本用法。 from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvasdef genera…

小程序评分/关键词/UV优化助力小程序登顶

随着小程序市场的日益繁荣&#xff0c;小程序搜索排名优化成为了众多开发者关注的焦点。小程序搜索排名被很多因素影响着&#xff0c;关键词、评分还有uv&#xff08;授权&#xff09;等。在本文小柚和各位老板分享如何有效优化小程序搜索排名的经验。 一、关键词策略 关键词是…

Python | Leetcode Python题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; class Solution:def canJump(self, nums: List[int]) -> bool:n, rightmost len(nums), 0for i in range(n):if i < rightmost:rightmost max(rightmost, i nums[i])if rightmost > n - 1:return Truereturn False

Web3的可持续性:构建环境友好的去中心化系统

引言 随着全球对可持续发展和环境问题的日益关注&#xff0c;Web3技术作为一种新型的互联网模式&#xff0c;也开始受到社区和开发者的关注。但很少有人关注到Web3对环境可持续性的潜在影响。本文将探讨Web3如何构建一个环境友好的去中心化系统&#xff0c;以及这如何促进一个…

偏微分方程算法之五点菱形差分法

目录 一、研究目标 二、理论推导 三、算例实现 四、结论 一、研究目标 上个专栏我们介绍了双曲型偏微分方程的主要算法及实现。从今天开始&#xff0c;我们在新的专栏介绍另一种形式偏微分方程-椭圆型的解法。 研究目标选取经典的二维椭圆型方程&#xff08;也称泊松Poisso…

马斯克突击访华;谷歌 Python 基础团队全数被裁;丨 RTE 开发者日报 Vol.195

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

python基础学习之写入csv文件

前言 在Python编程中&#xff0c;经常会遇到要将数据存到csv文件中&#xff0c;今天来详细讲一下。 一.功能目的 将以下数据存到csv文件中。 data [ {name: Alice, age: 25, city: New York}, {name: Bob, age: 30, city: Los Angeles}, {name: Charlie, age: 35, city:…