#include #include using namespace std; class Date { int year, month, day; public: Date() {} Date(int a, int b, int c) : year(a), month(b), day(c) {} Date operator + (const Date &a) {Date c(this -> year + a.year , this -> month + a.month ,this -> day + a.day ); c.norm(); return c; } Date operator + (const int &a) {Date c(this -> year, this -> month, this -> day + a); c.norm(); return c; } Date operator - (const Date &a) {Date c(this -> year - a.year , this -> month - a.month ,this -> day - a.day ); c.norm(); return c; } friend Date operator ++ (Date &a); friend Date operator ++ (Date &a, int); Date & operator = (const Date &a) { year = a.year; month = a.month; day = a.day; return *this; } Date & operator = (const int a) { year = month = day = a; return *this; } void set(char k) { cout << "Please, enter YYYY MM DD " << k << ": "; cin >> year >> month >> day; return; } void get(char k) { cout << " Date " << k << ": " << year << " " << month << " " << day << endl; return; } int getMaxDay(int month, int year) { if (month == 2) { if (isLeapYear(year)) { return 29; } return 28; } if (month % 2 == 0) { if (month < 7) return 30; return 31; } if (month < 8) return 31; return 30; } bool isLeapYear(int year) { return (!(year % 4) && year % 100 || !(year % 400)); } void norm() { if (day < 1) { day += getMaxDay(month - 1, year); month--; } if (month < 1) { year--; month += 12; } if (day > getMaxDay(month, year)) { day -= getMaxDay(month, year); month++; } if (month > 12) { month -= 12; year++; } return; } }; int main() { Date a, b, c; a.set('a'); b.set('b'); cout << endl << " operator + " << endl; c = a + b; cout << "c = a + b" << endl; c.get('c'); c = a + 30; cout << "c = a + 30" << endl; c.get('c'); cout << endl << " operator - " << endl; c = a - b; cout << "c = a - b" << endl; c.get('c'); cout << endl << " operator ++ " << endl; c = ++a; cout << "c = ++a " << endl; c.get('c'); a.get('a'); c = a++; cout << "c = a++ " << endl; c.get('c'); a.get('a'); return 0; } Date operator ++ (Date &a) { a.day = a.day + 1; a.norm(); return a; } Date operator ++ (Date &a, int){ Date _a = a; a.day = a.day + 1; a.norm(); return _a; }