Advertisement
Deerenaros

Date class.

Jul 4th, 2012
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.27 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. typedef unsigned char uchar;
  4. typedef unsigned int ulong;
  5.  
  6. //Создайте класс Data
  7. //с операциями +(int), +=(int), =, ==, !=, >, < , >=, < =, ++ и --
  8. //(int) - количество дней
  9.  
  10. class CData{
  11.     uchar m_day;
  12.     uchar m_month;
  13.     ulong m_year;
  14.     bool __isleab(){
  15.         if(!(m_year % 400)) return true;
  16.         else if (!(m_year % 100)) return false;
  17.         else if(!(m_year % 4)) return true;
  18.         return false;
  19.     }
  20.  
  21.     uchar __daysinmonth(uchar month){
  22.         uchar days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  23.         if(__isleab()) days[1] = 29;
  24.         return days[month-1];
  25.     }
  26.  
  27.     int __compare (CData b){
  28.         if(m_year < b.m_year) return -1;
  29.         else if(m_year == b.m_year){
  30.             if(m_month < b.m_month) return -1;
  31.             else if(m_month == b.m_month){
  32.                 if(m_day < b.m_day) return -1;
  33.                 else if(m_day == b.m_day) return 0;
  34.             }
  35.         }
  36.  
  37.         return 1;
  38.     }
  39.  
  40. public:
  41.     CData(uchar day, uchar month, ulong year){
  42.         m_day = day; m_month = month; m_year = year;
  43.     }
  44.  
  45.     CData operator += (int d){
  46.         while(d){
  47.             if(d + m_day <= __daysinmonth(m_month) && d + m_day > 0){ m_day += d; d = 0; }
  48.             else{
  49.                 if(d + m_day > 0){
  50.                     d -= __daysinmonth(m_month);
  51.                     m_month++;
  52.                     if(m_month == 13){m_month = 1; m_year++;}
  53.                 }
  54.             }
  55.         }
  56.     }
  57.  
  58.     bool operator <= (CData b){ return __compare(b) <= 0;}
  59.     bool operator >= (CData b){ return __compare(b) >= 0;}
  60.  
  61.     bool operator < (CData b){  return __compare(b) < 0;}
  62.     bool operator > (CData b){  return __compare(b) > 0;}
  63.     bool operator == (CData b){ return !__compare(b);   }
  64.     bool operator != (CData b){ return __compare(b);    }
  65.  
  66.     CData operator ++ (){
  67.         CData _r = *this;
  68.         *this += 1;
  69.         return _r;
  70.     }
  71.  
  72.     CData operator -- (){
  73.         CData _r = *this;
  74.         *this += (-1);
  75.         return _r;
  76.     }
  77. };
  78.  
  79. const CData operator + (CData a, int b){
  80.     CData c = a; c += b;
  81.     return c;
  82. }
  83.  
  84. const CData operator + (int b, CData a){
  85.     CData c = a; c += b;
  86.     return c;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement