西加加:6-4 日期类运算符重载

    技术2025-04-20  7

    定义一个日期类Date,包含年、月、日三个数据成员, 友元函数重载自增运算符(++),实现日期的自增。

    函数接口定义:

    Date Date::operator++(int)

    裁判测试程序样例:

    在这里给出函数被调用进行测试的例子。例如: #include <iostream> using namespace std; class Date{ private: int year; int month; int day; public: Date(); Date operator++(int); // 申明重载的操作符,这种方法是后缀++ /* ++和--重载注意: ++和--有前后缀之分,另外下面的int只是一个占位符用来提示编译器 类名 operator++(); ++前缀 -> 调用方式: ++对象名 类名 operator--(); --前缀 -> 调用方式: --对象名 类名 operator++(int); ++后缀 -> 调用方式: 对象名++ 类名 operator--(int); --后缀 -> 调用方式: 对象名-- */ void display(); }; // 判断是否是闰年 是闰年返回1 不是返回0 int judge(int year) { if((year%4==0 && year%100!=0)||year%400==0) return 1; //闰年 return 0; //非闰年 } // 构造函数 Date::Date() { cout<<"请输入年、月、日:\n"; cin>>year>>month>>day; } /* 请在这里填写答案 */ void Date::display() { cout<<year<<"-"<<month<<"-"<<day<<endl; } int main() { Date d1; cout<<"今天是:"; d1.display(); d1++; cout<<"明天是:"; d1.display(); }

    输入样例:

    在这里给出一组输入。例如:

    2016 12 31

    输出样例:

    在这里给出相应的输出。例如:

    2016-12-31 2017-1-1

    代码实现:

    Date Date::operator++(int) { switch (month) { case 1:case 3:case 5: case 7:case 8:case 10: if(day==31) { month++; day = 1; } else { day++; } break; case 4:case 6:case 9:case 11: if(day==30) { month++; day = 1; } else { day++; } break; case 2: if(judge(year)==1) { if(day==29) { month++; day = 1; } else { day++; } } else if(judge(year)==0) { if(day==28) { month++; day = 1; } else { day++; } } break; case 12: if(day==31) { day = 1; month = 1; year++; } else { day++; } break; } }

     

    Processed: 0.008, SQL: 9