#include typedef unsigned char uchar; typedef unsigned int ulong; //Создайте класс Data //с операциями +(int), +=(int), =, ==, !=, >, < , >=, < =, ++ и -- //(int) - количество дней class CData{ uchar m_day; uchar m_month; ulong m_year; bool __isleab(){ if(!(m_year % 400)) return true; else if (!(m_year % 100)) return false; else if(!(m_year % 4)) return true; return false; } uchar __daysinmonth(uchar month){ uchar days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if(__isleab()) days[1] = 29; return days[month-1]; } int __compare (CData b){ if(m_year < b.m_year) return -1; else if(m_year == b.m_year){ if(m_month < b.m_month) return -1; else if(m_month == b.m_month){ if(m_day < b.m_day) return -1; else if(m_day == b.m_day) return 0; } } return 1; } public: CData(uchar day, uchar month, ulong year){ m_day = day; m_month = month; m_year = year; } CData operator += (int d){ while(d){ if(d + m_day <= __daysinmonth(m_month) && d + m_day > 0){ m_day += d; d = 0; } else{ if(d + m_day > 0){ d -= __daysinmonth(m_month); m_month++; if(m_month == 13){m_month = 1; m_year++;} } } } } bool operator <= (CData b){ return __compare(b) <= 0;} bool operator >= (CData b){ return __compare(b) >= 0;} bool operator < (CData b){ return __compare(b) < 0;} bool operator > (CData b){ return __compare(b) > 0;} bool operator == (CData b){ return !__compare(b); } bool operator != (CData b){ return __compare(b); } CData operator ++ (){ CData _r = *this; *this += 1; return _r; } CData operator -- (){ CData _r = *this; *this += (-1); return _r; } }; const CData operator + (CData a, int b){ CData c = a; c += b; return c; } const CData operator + (int b, CData a){ CData c = a; c += b; return c; }