直接贴代码。
/*附原题:日期类CDate,包含三个私有成员数据year,month,day(均是整数),分别代表年、月、日。
成员函数的声明如下:(前2个是私有的)
int IsLeapYear(int y); //返回y年是否闰年,是返回1,否则返回0
int DaysOfMonth(int y,int m);//返回y年m月的天数
CDate();//构造函数,默认为2015年5月7日,同时输出信息“Default constructor is called!”
CDate(int y,int m,int d);//构造函数,年月日分别为y,m,d,同时输出信息“Constructor is called!”
void SetDate(int y,int m,int d);//设置修改日期为y年m月d日,同时输出信息“Date is reset!"
int GetYear(); //返回年份
int GetMonth(); //返回月份
int GetDay(); //返回日
void Show(); //按照指定格式(见Sample Output)输出日期信息
CDate IncOneDay(); //返回本日期后面一天所对应的年月日
设计上述类,并采用下面的main函数进行测试(提交时只需提交除main函数外的代码部分)
int main()
{
CDate d1;
d1.Show();
d1.SetDate(2015,2,28);
d1.IncOneDay().Show();
d1.Show();
CDate d2(2016,12,31);
d2.Show();
d1=d2.IncOneDay();
d1.Show();
d2.Show();
d1.SetDate(d2.GetYear(),d2.GetMonth(),d2.GetDay());
d1.Show();
return 0;
}
Sample Output
Default constructor is called!
2015-5-7
Date is reset!
2015-3-1
2015-2-28
Constructor is called!
2016-12-31
2017-1-1
2016-12-31
Date is reset!
2016-12-31
*/
#include <iostream>
using namespace std;
class CDate
{
private:
int year;
int month;
int day;
int IsLeapYear(int y);//返回y年是否闰年,是返回1,否则返回0
int DaysOfMonth(int y,int m);//返回y年m月的天数
public:
CDate();
CDate(int y,int m,int d);
void SetDate(int y,int m,int d);
int GetYear();
int GetMonth();
int GetDay();
void Show();
CDate IncOneDay();
};
int CDate::IsLeapYear(int y)
{
if((y%4==0&&y%100!=0)||y%400==0)
return 1;
else
return 0;
}
int CDate::DaysOfMonth(int y,int m)
{
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(IsLeapYear(y)&&m==2)
return a[m-1]+1;
else
return a[m-1];
}
CDate::CDate()
{
year=2015;
month=5;
day=7;
cout<<"Default constructor is called!"<<endl;
}
CDate::CDate(int y,int m,int d)
{
year=y;
month=m;
day=d;
cout<<"Constructor is called!"<<endl;
}
void CDate::SetDate(int y,int m,int d)
{
year=y;
month=m;
day=d;
cout<<"Date is reset!"<<endl;
}
int CDate::GetYear()
{
return year;
}
int CDate::GetMonth()
{
return month;
}
int CDate::GetDay()
{
return day;
}
void CDate::Show()
{
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
CDate CDate::IncOneDay()
{
day=day+1;
if(day>DaysOfMonth(year,month))
{
if(month<12)
{
month+=1;
day=1;
}
else if(month==12)
{
year+=1;
month=1;
day=1;
}
}
return *this;
}
int main()
{
CDate d1;
d1.Show();
d1.SetDate(2015,2,28);
d1.IncOneDay().Show();
d1.Show();
CDate d2(2016,12,31);
d2.Show();
d1=d2.IncOneDay();
d1.Show();
d2.Show();
d1.SetDate(d2.GetYear(),d2.GetMonth(),d2.GetDay());
d1.Show();
return 0;
}