3:运算符重载1 设计一个日期类Date,包括年、月、日等私有数据成员。要求实现日期的基本运算,如一日期加上天数、一日期减去天数、两日期相差的天数等。
描述
设计一个日期类Date,包括年、月、日等私有数据成员。要求实现日期的基本运算,如一日期加上天数、一日期减去天数、两日期相差的天数等。
提示:
在Date类中设计如下重载运算符函数:
Date operator+(int days); 返回一日期加一天数得到的日期
Date operator-(int days); 返回一日期减去天数得到的日期
int operator-(Date &b); 返回两日期相差的天数
在实现这些重载运算符函数调用以下私有成员函数:
leap(int); 判断指定的年份是否为闰年
dton(Date &); 将指定日期转换为从0年0月0日起的天数
ntod(int); 将指定的0年0月0日起的天数转换为对应的日期
输入
NA
输出
now:2002.6.12
then:2003.2.10
相差天数:242
now+100:2002.9.20
now-100:2002.3.4
上课的时候,老师在openjudge要求我们自己编写一遍代码。笔者用c++自己编写了一遍,困在了日期计算,这好像是某年c++考题填空
代码如下,仅供参考
#include
#include
using namespace std;
int ddd[2][13]={ {0, 31,28,31,30,31,30,31,31,30,31,30,31 },{ 0,31,29,31,30,31,30,31,31,30,31,30,31 } };
class Date
{int year,month,day;int leap(int y){if(y%4==0&&y%100!=0||y%400==0)return 1;return 0;}//日期转天数,天数转日期方法都是差不多的int dton(Date &D){int y=0,m=1,d=0,t,c=0;t=leap(y);for(;;){d++;c++;if(d==ddd[t][m]){d=0;m++;}if(m==13){m=1;y++;t=leap(y);}if(y==D.year&&m==D.month&&d==D.day)break;}return c;}Date ntod(int c){int y=0,m=1,d=0,t;t=leap(y);for(;;){d++;c--;if(d==ddd[t][m]){d=0;m++;}if(m==13){m=1;y++;t=leap(y);}if(c==0)break;}return Date(y,m,d);}public:Date(){}Date(int y,int m,int d):year(y),month(m),day(d){}Date operator+(int days){int t=dton(*this)+days;Date D=ntod(t);return D;}Date operator-(int days){int t=dton(*this)-days;Date D=ntod(t);return D;}int operator-(Date &b){int t=dton(*this)-dton(b);return t;}void print(){cout<
日期计算方法有点简单,就是把一天天叠加上去,直到到达目标日期。
天数计算方法同样,就是把一天天减去,直到到达天数。
只不过笔者在下课之后才想到怎么做。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
