C++

    xiaoxiao2022-07-05  156

    #include<iostream> using namespace std; class Date{ public: Date(int year=1996,int month=7,int day=30) : _year(year) , _month(month) , _day(day) { if (!((year > 0) && (month > 0 && month<13) && (day>0 && day < CheckDay(year,month)))){ cout << "输入的日期不合法!" << endl; } } //判断是否闰年 bool IsLeapYear(int year) { if ((0 == year % 4 && 0 != year / 100) || (0 == year % 400)) return true; return false; } Date operator+(int days);//当前日期加n天后的日期 Date operator-(int days);//当前日期减n天后的日期 int operator-(const Date& d);//两个日期相隔的天数 bool operator>(const Date& d); bool operator==(const Date& d)const; bool operator!=(const Date& d); Date& operator++(); Date operator++(int); Date& operator--(); Date operator--(int); friend ostream& operator<<(ostream& _cout, const Date d){ cout << "Date: " << d._year << "-" << d._month << "-" << d._day; return _cout; } private: int CheckDay(int year,int month) { int Monthdays[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (month == 2 && IsLeapYear(year)){ return Monthdays[month] = 29; } else{ return Monthdays[month]; } } private: int _year; int _month; int _day; }; Date Date::operator+(int days){ if (days<0){ return *this - (0 - days); } Date temp(*this); temp._day += days; int Monthday = CheckDay(temp._year, temp._month); while (temp._day > Monthday){ temp._day -= Monthday; temp._month++; if (temp._month > 12){ temp._year++; temp._month = 1; } } return temp; } Date Date::operator-(int days){ if (days < 0){ return *this + (0 - days); } Date temp(*this); temp._day -= days; while (temp._day <= 0){ temp._month -= 1; if (temp._month < 1){ temp._year -= 1; temp._month = 12; } temp._day += CheckDay(temp._year, temp._month); } return temp; } int Date::operator-(const Date& d){ Date minDate(*this); Date maxDate(d); if (minDate > maxDate){ minDate = d; maxDate = *this; } int cout = 0; while (minDate != maxDate){ cout++; ++minDate; } return cout; } bool Date::operator>(const Date& d){ if ((_year > d._year) || (_year == d._year&&_month > d._month) || (_year == d._year&&_month > d._month&&_day > d._day)) return true; return false; } bool Date::operator==(const Date& d)const{ return _year == d._year&& _month == d._month&& _day == d._day; } bool Date::operator!=(const Date& d){ return !(*this == d); } Date& Date::operator++(){ *this = *this + 1; return *this; } Date Date::operator++(int){ Date temp(*this); *this = *this + 1; return temp; } Date& Date::operator--(){ *this = *this - 1; return *this; } Date Date::operator--(int){ Date temp(*this); *this = *this - 1; return temp; } void FunTest(){ Date d1(1996, 9, 12); Date d2(d1); cout << d2 << endl; d2 = d1 + 10000; cout << d2 << endl; Date d3(d1); d3 = d1 - 100; cout << d3 << endl; Date d4(1996, 6, 4); int tmp = 0; tmp = d4 - d1; cout << tmp << endl; } int main(){ FunTest(); return 0; }
    最新回复(0)