C++类与对象练习题——日期类
题目描述
设计一个日期类Date,要求数据成员为私有,成员函数为公有,其中setDate()用来设置日期,Rise()用来实现日期增加一天,Print()用来输出日期等。设计一个友元函数Equal()用来比较两个日期是否相等。主函数内定义相关对象,验证各个函数。
设计一个日期类Date,要求数据成员为私有,成员函数为公有,其中setDate()用来设置日期,Rise()用来实现日期增加一天,Print()用来输出日期等。设计一个友元函数Equal()用来比较两个日期是否相等。主函数内定义相关对象,验证各个函数。输入
共有两行,每行三个正整数,中间用空格隔开,代表两个日期。其中三个正整数分别对应年、月、日。
共有两行,每行三个正整数,中间用空格隔开,代表两个日期。其中三个正整数分别对应年、月、日。输出
共有三行,第一行输出两个日期是否相等的结果,相等输出True,不等输出False。第二行输出三个正整数,中间用空格隔开,代表第一个日期增加一天后的结果。第三行输出三个正整数,中间用空格隔开,代表第二个日期增加一天后的结果。三个正整数依次代表年、月、日,每行结尾输出换行。
共有三行,第一行输出两个日期是否相等的结果,相等输出True,不等输出False。第二行输出三个正整数,中间用空格隔开,代表第一个日期增加一天后的结果。第三行输出三个正整数,中间用空格隔开,代表第二个日期增加一天后的结果。三个正整数依次代表年、月、日,每行结尾输出换行。样例输入
2000 2 28 1996 3 31
样例输出
False 2000 2 29 1996 4 1
写在前面
本题是类与对象的练手题目,本身没有思维上的难度,用来熟悉类与对象的编程思维是再好不过了。要实现日期后推一天,便要考虑年和月的进位,不可避免要考虑到闰年的影响。
具体看程序吧:
#include<iostream> using 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<<yea<<" "<<mon<<" "<<day<<endl; } void Date::setdate(int y,int m,int d) { yea=y;mon=m;day=d; } void equal(Date a,Date b) { if(a.yea==b.yea&&a.mon==b.mon&&a.day==b.day) cout<<"True"<<endl; else cout<<"False"<<endl; } void Date::rise() { if(mon==12&&day==31)//特判一下到达下一年的情况 {yea+=1; mon=1; day=1; } else { day+=1; if(day>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; }