#include"Date.h"Date::Date(int year,int month,int day){this->_year = year;this->_month = month;this->_day = day;if(!(_year >=0&&(month >0&& month <13)&&(day >0&& _day <=GetMonthDay(year, month)))){
cout <<"非法日期:";this->Print();}}voidDate::Print()const{printf("%d-%d-%d",this->_year,this->_month,this->_day);}intDate::GetMonthDay(int year,int month){staticint monthDateArray[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int day = monthDateArray[month];if(month ==2&&((year %4==0&& year %100!=0)||(year %400==0)))
day++;return day;}bool Date::operator>(const Date &d)const{if(this->_year > d._year)returntrue;elseif(this->_year == d._year &&this->_month > d._month)returntrue;elseif(this->_year == d._year &&this->_month == d._month &&this->_day > d._day)returntrue;elsereturnfalse;}
Date &Date::operator+=(int day){if(day <0)return*this-=-day;this->_day += day;while(this->_day >GetMonthDay(this->_year,this->_month)){this->_day -=GetMonthDay(this->_year,this->_month);this->_month++;if(this->_month ==13){this->_month =1;this->_year++;}}return*this;}
Date Date::operator+(int day)const{
Date ret(*this);
ret += day;return ret;}
Date &Date::operator-=(int day){if(day <0)return*this+=-day;this->_day -= day;while(this->_day <=0){this->_month--;if(this->_month ==0){this->_year--;this->_month =12;}this->_day +=GetMonthDay(this->_year,this->_month);}return*this;}
Date Date::operator-(int day)const{
Date ret(*this);
ret -= day;return ret;}
Date &Date::operator++(){*this+=1;return*this;}
Date Date::operator++(int){
Date ret(*this);*this+=1;return ret;}intmain(){
Date d1(2022,1,16);
Date ret = d1 +100;
ret.Print();}
Date.h
#include<iostream>usingnamespace std;classDate{public:Date(int year =1,int month =1,int day =1);staticintGetMonthDay(int year,int month);voidPrint()const;booloperator>(const Date &d)const;
Date &operator+=(int day);
Date operator+(int day)const;
Date &Date::operator-=(int day);
Date operator-(int day)const;
Date &operator++();
Date operator++(int);private:int _year;int _month;int _day;};