#include<iostream> using namespace std; class Data { public: Data(int year , int month, int day) ; void Display(); bool IsInvalidData(); int DayOfMonth(); Data& operator=(Data const& d) { if (this != &d) { _year = d._year; _month = d._month; _day = d._day; } return *this; } Data& operator+(const int day) { int last; if (day > 0) { _day += day; while (_day > this->DayOfMonth()) { last = _day - DayOfMonth(); if (_month < 12) { _month++; } else { _year++; _month = 1; } _day = last; } } return *this; } Data& operator-(const int day) { int last; if (day >= 0) { _day -= day; while (_day <=0) { last = _day + DayOfMonth(); if (_month > 1) { _month--; } else { _year -= 1; _month = 12; } _day = last; } } //else //{ //Data& operator+ 3; //} return *this; } Data& operator++() { _day++; if (_day > DayOfMonth()) { if (_month < 12) { _month += 1; _day = 1; } else { _year += 1; _month = 1; _day = 1; } } return *this; } Data operator++(int) { Data tmp = *this; _day++; if (_day > DayOfMonth()) { if (_month < 12) { _month += 1; _day = 1; } else { _year += 1; _month = 1; _day = 1; } } return tmp; } Data operator--(int) { Data tmp = *this; _day--; if (_day <1) { if (_month >1) { _month -= 1; _day = DayOfMonth(); } else { _year -= 1; _month = 12; _day = DayOfMonth(); } } return tmp; } int operator-(Data const& d) { int count = 0; Data tmp = d; if (*this > d) { while (tmp != *this) { ++tmp; count++; } return count; } } bool operator!=(Data const& d) { return(!(_year == d._year && _month == d._month && _day == d._day)); } bool operator==(Data const& d) { return(_year == d._year && _month == d._month && _day == d._day); } bool operator>(Data const& d) { return((_year > d._year || _year == d._year && _month > d._month) || ((_year == d._year) && (_month == d._month) && (_day > d._day))); } Data operator--() { _day--; if (_day <1) { if (_month >1) { _month -= 1; _day = DayOfMonth(); } else { _year -= 1; _month = 12; _day = DayOfMonth(); } } return *this; } Data(Data const& d) { this->_year = d._year; this->_month = d._month; this->_day = d._day; } private: int _year; int _month; int _day; bool IsLeapYear(int year); }; Data::Data(int year = 0, int month = 0, int day = 0) { _year = year; _month = month; _day = day; if (IsInvalidData() == false) { _year = 1900; _month = 1; _day=1; } } void Data::Display() { cout << this->_year << "-" << this->_month << "-" << this->_day << endl; } bool Data::IsLeapYear(int year) { if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) { return true; } else { return false; } } //Data&::Data operator=(Data const& d) //{ // //} bool Data::IsInvalidData() { if (_year < 1900 || _month<1 || _month>12 || _day<1 || _day>DayOfMonth()) { return false; } else { return true; } } int Data::DayOfMonth() { int arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (IsLeapYear(_year) == true) { arr[2] += 1; } return arr[_month]; } void test1() { Data d1(2016, 1, 1); d1.Display(); Data d2; d2= d1; d2.Display(); } void test2() { Data d1(2016, 1, 1); d1.Display(); d1 = d1 + 30; d1.Display(); d1 = d1 + 29; d1.Display(); d1 = d1 + 400; d1.Display(); } void test3() { Data d1(2016, 1, 21); d1.Display(); d1 = d1-(10); d1.Display(); //d1 = d1-11; //d1.Display(); //d1 = d1 - 365; //d1.Display(); } void test4() { Data d1(2016, 1, 1); ++d1; d1.Display(); Data d2(2016, 12, 31); ++d2; d2.Display(); Data d3(2016, 1, 31); ++d3; d3.Display(); } void test5() { Data d1(2016, 1, 1); Data a; a=d1++; a.Display(); Data d2(2016, 12, 31); a=d2++; a.Display(); Data d3(2016, 1, 31); a=d3++; a.Display(); } void test6() { Data d1(2016, 2, 1); Data a; a = d1--; a.Display(); } void test7() { Data d1(2016, 11, 10); d1.Display(); Data d2(2016, 12, 31); d2.Display(); int count = d2 - d1; cout << count << endl; } int main() { //test1(); //test2(); //test3(); //test4(); //test5(); //test6(); test7(); system("pause"); return 0; }
时间: 2024-11-10 11:06:43