日期类运算符重载

  1 #include <iostream>
  2 using namespace std;
  3 
  4 class Date {
  5 private:
  6     int year;
  7     int month;
  8     int day;
  9 public:
 10     Date();
 11     Date operator++(int);        // 申明重载的操作符,这种方法是后缀++ 
 12     /*
 13     ++和--重载注意:  ++和--有前后缀之分,另外下面的int只是一个占位符用来提示编译器
 14     类名 operator++();       ++前缀    -> 调用方式: ++对象名
 15     类名 operator--();         --前缀  -> 调用方式: --对象名
 16     类名 operator++(int);    ++后缀     -> 调用方式: 对象名++
 17     类名 operator--(int);   --后缀  -> 调用方式: 对象名--
 18     */
 19     void display();
 20 };
 21 
 22 // 判断是否是闰年 是闰年返回1 不是返回0 
 23 int judge(int year)
 24 {
 25     if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
 26         return 1;          //闰年 
 27     return 0;              //非闰年 
 28 }
 29 
 30 // 构造函数 
 31 Date::Date()
 32 {
 33     cout << "请输入年、月、日:\n";
 34     cin >> year >> month >> day;
 35 }
 36 
 37 /* 请在这里填写答案 */
 38 Date Date::operator ++(int)
 39 {
 40     day++;
 41 
 42     switch (month)//把整型转换为字符型
 43     {
 44     case 1:                                                        //case '1'错误!因为month不是字符串 
 45         if (day > 31)
 46         {
 47             day = 1;
 48             month = 2;
 49         }
 50         break;
 51     case 2:
 52         if (day <= 28);//day自增了!!!!!!!!!!
 53         else//day已经自增后,如果还大于29就变3月啦
 54         {
 55             if ((!judge(year)) || judge(year) && day == 30)//如果是闰年 
 56             {
 57                 day = 1;
 58                 month = 3;
 59             }
 60         }
 61         break;
 62     case 3:
 63         if (day > 31)
 64         {
 65             day = 1;
 66             month = 4;
 67         } break;
 68     case 4:
 69         if (day > 30)
 70         {
 71             day = 1;
 72             month = 5;
 73         } break;
 74     case 5:
 75         if (day > 31)
 76         {
 77             day = 1;
 78             month = 6;
 79         }break;
 80     case 6:
 81         if (day > 30)
 82         {
 83             day = 1;
 84             month = 7;
 85         }break;
 86     case 7:
 87         if (day > 31)
 88         {
 89             day = 1;
 90             month = 8;
 91         }break;
 92     case 8:
 93         if (day > 31)
 94         {
 95             day = 1;
 96             month = 9;
 97         }break;
 98     case 9:
 99         if (day > 30)
100         {
101             day = 1;
102             month = 10;
103         }break;
104     case 10:
105         if (day > 31)
106         {
107             day = 1;
108             month = 11;
109         }
110         break;
111     case 11:
112         if (day > 30)
113         {
114             day = 1;
115             month = 12;
116         }break;
117     case 12:
118         if (day > 31)
119 //        if (day++ > 31)//错误!!!!!它是先比较再自增的!!
120         {
121 
122             day = 1;
123             month = 1;
124             year++;
125         }
126         break;
127 
128     }
129     return *this;
130 }
131 
132 void Date::display()
133 {
134     cout << year << "-" << month << "-" << day << endl;
135 }
136 
137 int main()
138 {
139     Date d1;
140     cout << "今天是:";
141     d1.display();
142     d1++;
143     cout << "明天是:";
144     d1.display();
145 }

 

posted @ 2020-05-27 16:41  Gx_y  阅读(460)  评论(0编辑  收藏  举报