设计一个日期类Date,要求数据成员为私有,成员函数为公有,其中setDate()用来设置日期,Rise()用来实现日期增加一天,Print()用来输出日期等。设计一个友元函数Equal()用来比较两个日期是否相等。主函数内定义相关对象,验证各个函数。
输入共有两行,每行三个正整数,中间用空格隔开,代表两个日期。其中三个正整数分别对应年、月、日。
输出共有三行,第一行输出两个日期是否相等的结果,相等输出True,不等输出False。第二行输出三个正整数,中间用空格隔开,代表第一个日期增加一天后的结果。第三行输出三个正整数,中间用空格隔开,代表第二个日期增加一天后的结果。三个正整数依次代表年、月、日,每行结尾输出换行。
样例输入2000 2 28 1996 3 31样例输出
False 2000 2 29 1996 4 1写在前面
本题是类与对象的练手题目,本身没有思维上的难度,用来熟悉类与对象的编程思维是再好不过了。要实现日期后推一天,便要考虑年和月的进位,不可避免要考虑到闰年的影响。
具体看程序吧:
#includeusing namespace std; bool loop(int y)//判断是否闰年 { if(y%400==0) return 1; else if(y%4==0&&y%100!=0) return 1; else return 0; } int dom(int m,int y)//dom(day of month)用来判断该年的该月有多少天,m:month,y:year. { int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if(loop(y)) a[1]=29; return a[m-1]; } class Date{ int yea,mon,day; public: void setdate(int y,int m,int d); void rise(); void print(); friend void equal(Date a,Date b); }; void Date::print() { cout< dom(mon,yea))//如果加一天后超过该月总天数则后推一个月 {mon+=1; day=1; } } } int main() { Date a,b; int y,m,d; cin>>y>>m>>d; a.setdate(y,m,d); cin>>y>>m>>d; b.setdate(y,m,d); equal(a,b); a.rise(); b.rise(); a.print(); b.print(); return 0; }



