| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> [C++] 类与对象(中) 一篇带你解决运算符重载实例--日期类Date -> 正文阅读 |
|
[C++知识库][C++] 类与对象(中) 一篇带你解决运算符重载实例--日期类Date |
上篇文章我们了解了运算符重载,本篇文章我们将通过一个实例:日期类来巩固运算符重载的知识。 目录 本篇文章我们将主要实现一下接口。
?此项目为正式的日期类项目,因为我们可以多文件存储。主要包含以下文件: 1.全缺省的构造函数构造函数类似于初始化,其中需要注意的是要对日期的合法性进行判断。由于每个月份的天数存在差别,这里在day中我们需要调用一个GetMonthDay函数接口。
由于每年有12个月份,每个月的天数存在微小差别,因此我们选择用数组存放对应月份的天数。这里我们月份对应的下标放对应月份的天数,方面调用。由于我们会多次调用此函数,并且我们不会对其中的内容进行更改。因此我们可以将开辟的数组放在静态区。只需要一次初始化可以实现多次调用的功能。提高的程序的效率。? 由于闰年和平年的2月份天数存在差别,因此我们要对2月份这种特殊情况进行判断,如果是闰年就直接返回29,如果是平年就正常返回。
2. operator ==要判断两个日期是否相等,需要判断两个日期的年月日分别相等。因此我们需要对三个结果进行逻辑与判断,最终返回布尔结果。
3.operator <要判断日期<日期。 1、首先要比较对应的年,如果年小后面无需比较,直接返回true. 2、如果年相同,再比较月,如果月小无需比较天,直接返回true. 3、如果年月都相同,此时比较天,如果天小返回true. 因此以上3种情况满足任意一种就返回true,否则返回false.
4.operator <=由于我们已经书写了<和==,因此如果我们要判断<=我们只需要复用上述写好的两个接口即可。逻辑为<和==都满足<=。因此<和==满足其中一个即可返回true,否则返回false.
5.operator !=!=和==构成逻辑非,两个接口逻辑相反,因此只需要给==取反即可。
6.operator >>和<=构成逻辑非,因此只需要对<=取反即可。
7.operator >=?>=和<构成逻辑非,因此只需要对<取反即可
8.operator+=(int day) 日期+=天数根据逻辑可知,一个日期加上一个天数,将返回一个新的日期。因此这里函数的返回值应为一个日期类Date。 为了实现这个接口,我们可以举例来进行分析:
测试结果:2022-8-27? 经过验证正确。 需要注意的是:如果传入的day小于0,我们先对day取相反数再处理即可。? 9.operator+(int day) 日期+天数由于我们已经实现了日期+=天数,因此我们可以复用。+=和+唯一的区别是+=改变本身,+不改变。因此我们创建一个新的Date,存放结果即可。
测试结果:此时我们发现d1并没有改变,d2改变了。结果正确。 10.operator-=(int day) 日期-=天数逻辑同+=类似,只需要这里注意一些细节节即可,我们同样可以使用一个例子分析 这里如果要是用--,一定是前置--,因此自身是改之后再使用。 需要注意的是:如果传入的day小于0,我们先对day取相反数再处理即可。?
我们同样使用8月27减去100如果返回5月19说明正确。 测试结果正确 11.operator-(int day) 日期-天数?道理同+=和+的关系相同,同样采用复用。
测试: 12.前置++,前置--,后置++,后置--
这个问题其实编译器也考虑到了,因此编译器为了区别前置++和后置++,编译器规定,后置++(或后置--)的参数列表中多穿一个值。此时因为两个函数的参数列表的参数个数不同,两个函数就构成了函数重载。就可以区分两个操作符了。 需要注意的是,加的这个参数是为了区分前置和后置,因此传过来的值无所谓。我们一般可以省略写就直接只写数据类型。 因此:前置++就相当于是+=1,
前置--就相当于-=1
后置++先使用,因此要创建一个tmp存上,再自身++
后置--先使用,因此要创建一个tmp存上,再自身--
测试:结果正确
13.日期-日期这个接口我们要实现一个日期与另一个日期之间相差多少天。如果是小日期-大日期,应该返回一个负数。因此我们要对这个小细节进行处理。 这里的实现逻辑是: 1、我们先默认第一个日期为大日期,第二个日期为小日期。 2、我们在对这两个进行比较,如果第一个是小日期,我们就将max和min进行日期调换。如果调换说明是小日期-大日期,最终的结果理应该是个负数。因此我们定义一个flag = 1,如果这里调换的话,让flag = -,最终返回n*flag即可。 3、我们要始终保持小追大。我们使用前置++运算,让小的日期追大的日期,这里需要定义一个计数器n。每++一次,n就++一次。
测试:结果正确 完整代码:我已经实现完啦,各位小伙伴可以自测一下哦~? (本篇完) |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 18:50:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |