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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RepeatMasker 基因组重复区域文件

rmsk.txt 一般关注标红的几列, 各列含义: Schema for RepeatMasker - Repeating Elements by RepeatMasker "rmsk.txt" 是 UCSC Genome Browser 提供的一个文件,用于描述重复序列的注释信息。通常,它包含了以下列: 1. **bin**:UCSC Genome Browser 使用的染色…

笔记:编写程序,绘制一个展示 2013~2019 财年阿里巴 巴淘宝+天猫平台的 GMV 的柱形图,实现过程如下:

文章目录 前言一、GMV 的柱形图是什么&#xff1f;二、编写代码总结 前言 编写程序。根据实例 2 的要求&#xff0c;绘制一个展示 2013~2019 财年阿里巴 巴淘宝天猫平台的 GMV 的柱形图&#xff0c;实现过程如下&#xff1a; &#xff08;1&#xff09; 导入 matplotlib.pypl…

2024中国(江西)国际先进陶瓷材料及智能装备博览会

2024中国&#xff08;江西&#xff09;国际先进陶瓷材料及智能装备博览会 “中国&#xff08;江西&#xff09;国际先进陶瓷材料及智能装备博览会” 陶瓷三新展 &#xff08;新材料、新装备、新技术&#xff09; 绿色智能、引领未来 2024年11月1日-11月3日 中国江西 南昌…

生活服务推出品牌实惠团购,覆盖五一假期“吃喝玩乐”多场景

4月26日&#xff0c;抖音生活服务平台上线“跟着大牌过五一”活动会场&#xff0c;携手22家连锁品牌商家&#xff0c;于“五一”前推出优价团购和时令新品&#xff0c;覆盖“吃喝玩乐”多重购物需求&#xff0c;助力假期消费。同时&#xff0c;伴随各地涌现的文旅热潮&#xff…

项目:使用LNMP搭建私有云存储

目录 项目&#xff1a;使用LNMP搭建私有云存储 准备工作 回复快照&#xff0c;关闭安全软件 上传软件 设置nextcloud安装命令权限 设置数据库 重启数据库 配置nginx 安装 内网穿透 cpolar的域名信任 项目&#xff1a;使用LNMP搭建私有云存储 准备工作 回复快照&a…

C#上位机与S7-200Smart通信注意事项

S7-200SMART连接 问题描述 我们使用C#开发上位机和S7-200Smart系列PLC交互数据时&#xff0c;大多会用到Sharp7、Snap7之类的通信类库。有些通信类库默认的使用的是PG连接资源&#xff0c;而对于S7-200Smart来说&#xff0c;它的PG连接资源只有1个。 官网200smart提到的连接数…

解决idea不识别${pageContext.request.contextPath}的方法

文章目录 一、产生原因二、解决方法——直接修改web.xml文件三、修改模板——找到web.xml模板&#xff0c;修改替换 一、产生原因 由于web.xml 使用的web-app版本号过低。导致无法识别"{pageContext.request.contextPath}"。 IDEA在创建javaweb项目的时候&#xff0…

imx6ull配置交叉编译环境编译u-boot及linux所遇问题解决记录

文章目录 前言一、问题 1 及解决方法1、问题 1 描述2、问题 1 解决方法 二、问题 2 及解决方法1、问题 2 描述2、问题 2 解决方法 三、问题 3 及解决方法1、问题 3 描述2、问题 3 解决方法 四、问题 4 及解决方法1、问题 4 描述2、问题 4 解决方法 前言 CoM-iMX6UL(L) 是一款兼…

笔记:能量谱密度与功率谱密度(二)

目录 一、ESD与PSD的定义、单位、性质 二、对ESD与PSD的直观理解 三、总结&#xff1a; 某物理量的“分布”在离散系统中&#xff0c;各点(纵坐标含义&#xff09;的物理意义仍然是该物理量&#xff0c;而在连续系统中&#xff0c;各点&#xff08;纵坐标含义&#xff09;的物…

react报错:Warning: Each child in a list should have a unique “key“ prop.

我是万万没想到的&#xff0c;使用Popconfirm不添加key属性也会报错&#xff1a; react-refresh:160Warning: Each child in a list should have a unique "key" prop. Check the render method of Cell. Seehttps://reactjs.org/link/warning-keys for more informa…

STM32点灯大师(点了一颗LED灯,轮询法)

配置操作&#xff1a; 一、使用CubeMX配置到大致的操作 1.1 选择芯片 1.2 选择引脚&#xff08;根据电路图&#xff09; 1.3 配置gpio口 1.4 配置系统 1.5文件项目操作 最后就是点击 二、点击CubeMX生成的代码&#xff0c;并且修改代码 2.1 看看效果 2.2 写代码

Python 网络编程实践:从基础到进阶

目录 网络编程 一.IP地址简介 1. IP 地址的概念 1.1. IP 地址的表现形式 1.2. IP 地址的作用 2. 查看 IP 地址 3. 检查网络是否正常 4. 小技巧 二.端口和端口号 1. 什么是端口 2. 什么是端口号 3. 端口和端口号的关系 4. 端口号的分类 4.1. 知名端口号 4.2. 动…

【Unity学习笔记】第十四 Prefab 概念解惑

目录 1 prefab、prefab变体、prefab覆盖和prefab 嵌套2 connect 与unpack3 prefab到底是什么&#xff0c;它和gameobject又有什么区别&#xff1f;4 为什么要用prefab&#xff1f;5 代码动态加载prefab6 为什么我unity PrefabUtility.InstantiatePrefab() 得到的是null7 Prefab…

基于Springboot的租房网站

基于SpringbootVue的租房网站的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 房屋信息 交流论坛 房屋资讯 后台登录 用户管理 房屋类型管理 房屋信息管理 预…

关于权限的设计

首先系统权限&#xff0c;每个账号登录后&#xff0c;都需要知道这个账号允许访问哪些api&#xff0c;哪些数据权限&#xff08;一般是指其他账号的一些数据&#xff09; 这里就需要通过角色来关联。 --1.角色绑定菜单&#xff0c;每个菜单设计的时候包含了这个菜单会用到的所…

【成功案例】利用多款国产内网渗透工具勒索数十台虚拟机的babyk解密恢复项目

1.背景 2024年4月11日&#xff0c;某影视公司的服务器遭受了勒索软件攻击&#xff0c;随后向我司寻求帮助进行恢复。经过我司溯源排查&#xff0c;勒索组织通过一处用友NC资产进行入侵&#xff0c;攻击者利用国产工具横移了数小时后实施勒索。其中一台超融合&#xff08;vcente…

监控员工上网有什么软件(2024三款受欢迎的员工上网监控软件盘点)

企业对员工上网行为的有效监管显得愈发重要。 既要确保工作效率与信息安全&#xff0c;又要尊重员工隐私并遵守相关法律法规&#xff0c;选择一款功能强大、合规且易于使用的员工上网监控软件至关重要。 本文将为您介绍2024年三款备受市场欢迎的员工上网监控软件&#xff0c;以…

20232801 2023-2024-2 《网络攻防实践》实践八报告

20232801 2023-2024-2 《网络攻防实践》实践八报告 1.实践内容 1.动手实践任务: 对提供的rada恶意代码样本&#xff0c;进行文件类型识别&#xff0c;脱壳与字符串提取&#xff0c;以获得rada恶意代码的编写作者. 2.动手实践任务二&#xff1a;分析Crackme程序 在WinXP Attac…

LeetCode 每日一题 ---- 【1017.负二进制转换】

LeetCode 每日一题 ---- 【1017.负二进制转换】 1017.负二进制转换方法一&#xff1a;模拟进制转换推广&#xff1a;任意进制转换 1017.负二进制转换 方法一&#xff1a;模拟进制转换 我们平常做进制转换最常用的方法就是辗转相除法&#xff0c;下面的图示分别给出了普通的10…

pmp培训哪家好?高通过率的靠谱机构如何选择

PMP培训机构的选择本来就是一个需要有挑选的人才能顺利进行&#xff0c;所以如果你正好是PMP小白的话一定要抓紧补充一下自己在挑选机构方面的知识&#xff0c;理清自己的需求才能进行多维度的挑选&#xff0c;最后才能选择一个比较合适的机构。已经换证一次的老鸟路过&#xf…