//复用
Date Date::operator-(int day)const{
Date ret(*this);//复用-=
ret._day -= day;return ret;}
前置++,后置++
Date& Date::operator++(){*this+=1;return*this;}//int参数不需要给实参,因为没用,int作用是为了跟前置++构成函数重载
Date Date::operator++(int){
Date tmp(*this);*this+=1;return tmp;}
前置–,后置–
Date& Date::operator--(){*this-=1;return*this;}
Date Date::operator--(int){
Date tmp(*this);*this-=1;return tmp;}
int Date::operator-(const Date& d)const{
Date max =*this;
Date min = d;int flag =1;if(*this< d){
max = d;
min =*this;
flag =-1;}int n =0;while(min != max){++min;++n;}return n * flag;}
Date.h
#pragmaonce#define_CRT_SECURE_NO_WARNINGS1#include<iostream>#include<assert.h>using std::cout;using std::cin;using std::endl;classDate{public:Date(int year =0,int month =1,int day =1);voidPrint()const;//析构、拷贝构造、赋值重载,可以不屑,默认生成就够用
Date&operator+=(int day);
Date operator+(int day)const;
Date&operator-=(int day);
Date operator-(int day)const;//++d
Date&operator++();
Date&operator--();//d++//int参数不需要给实参,因为没用,int作用是为了跟前置++构成函数重载
Date operator--(int);
Date operator++(int);booloperator>(const Date& d)const;booloperator>=(const Date& d)const;booloperator<(const Date& d)const;booloperator<=(const Date& d)const;booloperator==(const Date& d)const;booloperator!=(const Date& d)const;intoperator-(const Date& d)const;private:int _year;int _month;int _day;};
Date.cpp
#include"Date.h"//获取当前月份天数inlineintGetMonthDay(int year,int month){//数组存储平年每个月的天数staticint dayArray[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int day = dayArray[month];if(2== month &&((year %4==0&& year %100!=0)||(year %400==0))){
day =29;}return dayArray[month];}//构造函数 —— 初始化日期类Date::Date(int year,int month,int day){//检查日期的合法性if(year >=0&& month >0&& month <13&& day <=GetMonthDay(year, month)){
_year = year;
_month = month;
_day = day;}else{
cout <<"非法日期"<< endl;}}//打印voidDate::Print()const{
cout << _year <<"年"<< _month <<"月"<< _day <<"日"<< endl;}//+=
Date& Date::operator+=(int day){if(day <0){*this-=-day;}else{
_day += day;//天数不合法,进位while(_day >GetMonthDay(_year, _month)){
_day -=GetMonthDay(_year, _month);
_month++;if(_month >12){++_year;
_month =1;}}}return*this;}//复用
Date Date::operator+(int day)const{
Date ret(*this);//复用+=
ret._day += day;return ret;}//-=
Date& Date::operator-=(int day){if(day <0){//复用*this+=-day;}else{
_day -= day;while(_day <=0){--_month;if(_month ==0){--_year;
_month =12;}
_day +=GetMonthDay(_year, _month);}}return*this;}//复用
Date Date::operator-(int day)const{
Date ret(*this);//复用-=
ret._day -= day;return ret;}
Date& Date::operator++(){*this+=1;return*this;}//int参数不需要给实参,因为没用,int作用是为了跟前置++构成函数重载
Date Date::operator++(int){
Date tmp(*this);*this+=1;return tmp;}
Date& Date::operator--(){*this-=1;return*this;}
Date Date::operator--(int){
Date tmp(*this);*this-=1;return tmp;}bool Date::operator>(const Date& d)const{if(_year > d._year){returntrue;}elseif(_year == d._year){if(_month > d._month){returntrue;}elseif(_month == d._month){if(_day > d._day){returntrue;}}}returnfalse;}bool Date::operator==(const Date& d)const{return _year == d._year
&& _month == d._month
&& _day == d._day;}//复用bool Date::operator>=(const Date& d)const{return*this> d ||*this== d;}bool Date::operator<(const Date& d)const{return!(*this>= d);}bool Date::operator<=(const Date& d)const{return!(*this> d);}bool Date::operator!=(const Date& d)const{return!(*this== d);}int Date::operator-(const Date& d)const{
Date max =*this;
Date min = d;int flag =1;if(*this< d){
max = d;
min =*this;
flag =-1;}int n =0;while(min != max){++min;++n;}return n * flag;}