C++构造运算符重载实现日期类

2017-02-20 10:50 阅读 1,007 次 评论 0 条

什么是日期类?

C++来实现一个日期类Date,包括年(_year)、月(_month)、日(day),来实现对日期的自增(++),自减(--),加上特定天数(+days),减去指定天数(-days),输入输出的实现,以及通过输入两个特定的日期,来计算相隔的天数。其中会用到构造函数、拷贝构造函数、析构函数,以及多类运算符的重载。

日期类实现思路

在设计日期类过程中,有一个月份相对特殊,那就是二月。可以通过判断是否闰年来确定二月的天数,为了后面实现的方便与简洁,可以将12个月的天数存储于一个一维数组中。在运算符重载中,对this指针的迷惑可以查看https://www.1024do.com/?p=1772this指针的详解。重载中会巧妙运用引用&及const关键字,程序中会降低一些算法的复杂度,具体实现将在函数调用中详细介绍。

函数调用模块

①构造函数及非法日期判断(以1900-1-1日为下限)

②拷贝构造函数(注意函数参数为const Date&类型)

③析构函数(可以在里面打印"~Date",什么都不做也可以)

④判断是否闰年(4年一闰,逢百年不闰,400年一闰)

⑤获取某年某月的指定天数(判断闰年后月份已经确定,可存储于数组中方便调用)

⑥赋值运算符 = 重载(分两种情况:1.自己给自己赋值 2.自己给别人赋值)

⑦重载 + days(加上指定天数)的重载(当+days大于该月总天数时,用days减去该月天数,月份month+1,差值即为新月份的天数。若遇到年末,即month = 12时,年份year++,月份month置1,否则month++)

⑧重载 - days (减去指定天数)的重载(与+days类似,用该月天数-days,其差值若小于0,且在年初,则年份year--,置月份month=12,否则month--)

⑨前置 ++ 的重载(+1操作应该考虑天数为月末,月份为年末时的特殊情况,通过判断月末与年末,对指定的月份+1或年份+1,并置新月份=1)

⑩后置 ++ 的重载(后置++与前置++类似,返回值略有差异,可以拷贝构造一个临时的函数来保存this指针保存的内容,最终返回临时的函数)

⑪前置 -- 的重载(-1操作应该考虑天数为月初,月份为年初时的特殊情况,通过判断月末与年末,对指定的月份-1或年份-1,并置新月份=12)

⑫后置 -- 的重载(与前置--类似,可以使用拷贝构造函数构造一个临时的函数,最终返回临时函数即可)

⑬运算符 != 的重载(如果this指针和d内容相等,直接取!返回)

⑭运算符 < 的重载(对应年份比较的结果逻辑与运算,若年份差值>0,直接return false,否则看月份,若月份差值>0,直接return false,否则看天数,确定最终返回结果)

⑮运算符 == 的重载(对应的年月日与构造的新对象一一比较)

⑯输出运算符 << 的重载(模拟cout输出)

⑰输入运算符 >> 的重载(模拟cin输入)

⑱两个日期相隔天数 - 的重载(这里可以运用一个巧妙的方法,将当前对象拷贝构造为Max,引用对象拷贝构造为Min,如果Max<Min,调用库函数交换,并用一个状态量flag标记。再利用while循环,只要Max与Min不相等,Max--,计数器Count++,Count即为最终的相隔天数)

源代码及注释

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:C++构造运算符重载实现日期类 | 术与道的分享
分类:编程素养 标签:,
1024do.com导航_术与道导航平台

发表评论


表情