#include<stdio.h> #include<iostream> using namespace std; class Date{ public: Date(int y=1,int m=1,int d=1){ //判断是否有效 if (y <= 0 || m <= 0 || m > 12 || d<0 || d>getDay(y, m)){ //日期无效 _y = 1; _m = 1; _d = 1; cout << "日期无效,设置为默认值:1-1-1" << endl; } else{ _y = y; _m = m; _d = d; } } int getDay(int y, int m){ static int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int day = days[m]; //如果是2月,而且为闰年,修改天数 if (m == 2 && (((y % 4 == 0) && (y % 100 != 0)) || y % 400 == 0)){ day += 1; return day; } } //日期的运算 Date+int Date& operator+=(int day){ //判断日期是否为负数 if (day < 0) return *this -= -day; //相加天数 _d += day; //判断天数是否溢出 while (_d > getDay(_y, _m)){ //减去当月的天数 _d -= getDay(_y, _m); //月份进位 ++_m; //判断月份是否溢出 if (_m == 13){ //下一年1月 ++_y; _m = 1; } } //返回相加后的结果 return *this; } //日期的运算 Date-int Date& operator-=(int day){ //判断日期是否为负数 if (day < 0) return *this += -day ; _d -= day; while (_d <= 0){ //用上一个月的天数回补 --_m; //判断月份是否溢出 if (_m == 0){ //需要回退到上一年的12月 _y--; _m = 12; } _d += getDay(_y, _m); } return *this; } //==日期是否相等 bool operator==(const Date& d){ return _y == d._y &&_m == d._m &&_d == d._d; } //!= bool operator!=(const Date& d){ return !(*this == d); } // > bool operator>(const Date& d){ if (_y > d._y) return true; else if (_y == d._y){ if (_m > d._m) return true; else if (_m == d._m){ if (_d > d._d) return true; } } return true; } //< bool operator<(const Date& d){ return !(*this >= d); } //>= bool operator>=(const Date& d){ return *this > d || *this == d; } //<= bool operator<=(const Date& d){ return !(*this > d); } private: int _y; int _m; int _d; }; void test(){ Date d1(2021, 2, 4); Date d2(2021, 2, 4); Date d3(2021, 2, 4); Date d4(2021, 2, 4); d1.operator+=(1); d2 += 30; d3 += 90; d4 += 360; d1 -= 1; d2 -= 30; d3 -= 90; d4 -= 360; } int main(){ test(); system("pause"); return 0; }

浙公网安备 33010602011771号