1条回答 默认 最新
- threenewbee 2019-06-20 20:51关注
先mark下,完整的代码稍后给你写
#include<iostream> using namespace std; class Date { public: Date(int year = 1900, int month = 1, int day = 1) //构造 :_year(year) , _month(month) , _day(day) { if (!isInvalidDate(_year, _month, _day)) { _year = 1900; _month = 1; _day = 1; } } Date operator+(int count) { Date tmp(*this); tmp._day += count; ToCorrect(tmp); return tmp; } Date operator-(int count) { Date tmp(*this); tmp._day -= count; ToCorrect(tmp); return tmp; } Date& operator++() //前置++ { (*this)++; return *this; } Date operator++(int) //后置++ { Date tmp(*this); (*this)+=1; return tmp; } Date& operator--() { (*this)--; return *this; } Date operator--(int) { Date tmp(*this); (*this)--; return tmp; } int operator-(const Date &d) { int flag = 1; Date max = *this; Date min = d; if (*this<d) { max = d; min = *this; flag = -1; } int count=0; while (min != max) { ++min; count++; } return count*flag; } Date& operator+=(int day) { *this = *this + day; return *this; } bool operator!=(const Date &d) { return !(*this == d); } bool operator<(const Date &d) { return !((*this>d)||(*this==d)); } bool operator>=(const Date &d) { return !(*this<d); } bool operator>(const Date &d) { return (_year > d._year || (_year == d._year && _month > d._month) || (_year == d._year && _month == d._month && _day > d._day)); } bool operator==(const Date &d) { return ((_year == d._year) && (_month == d._month) && (_day == d._day)); } public: bool IsLeapYear(int year) { if(year % 400 || (year % 4 && year % 100)) return true; return false; } int YearsOfMonth(int year, int month) { int day; int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; day = days[month]; if (month == 2) day += IsLeapYear(year); return day; } Date ToCorrect(Date &d) { if (d._day>YearsOfMonth(d._year, d._month)) { while (d._day > YearsOfMonth(d._year, d._month)) { d._day -= YearsOfMonth(d._year,d._month); if (d._month == 12) { d._year++; d._month = 1; } else { ++d._month; } } } else { while (d._day <= 0) { if (d._month == 1) { d._year--; d._month = 12; } else { --d._month; } d._day += YearsOfMonth(d._year, d._month); } } return d; } bool isInvalidDate(int year, int month, int day) { if ((year < 1) || (month<0 || month>12) || (day<0 || day>YearsOfMonth(year,month))) return false; return true; } void Display() { cout << _year << "-" << _month << "-" << _day << endl; } friend istream& operator>>(istream& is, Date &d); friend ostream& operator<<(ostream& os, const Date &d); private: int _year; int _month; int _day; }; istream& operator>>(istream& is, Date& d) { cout << "请输入一个日期" << endl; is >> d._year >> d._month >> d._day; return is; } ostream& operator<<(ostream& os, const Date &d) { cout << d._year << "-" <<d. _month << "-" << d._day << endl; return os; } int main() { /*Date d1(2016,8,18); //d1.Display(); //d1 = d1++; cout << d1 << endl;*/ //Date d1(2015, 12, 3); //(d1++).Display(); //d1.operator++(&d1, 0); //(++d1).Display(); //d1.operator++(&d1); Date d1(2015, 12, 3); Date d2(2015, 11, 1); cout << (d1 - d2) << endl; //Date d1(2015, 12, 3); //Date ret = d1 + 40; //operator+ //ret.Display(); /*Date d1(2015, 12, 3); Date ret = d1 + 40; d1 = ret; ret = d1 - 40; ret.Display();*/ /*Date ret; Date d2(2015, 1, 1); ret = d2 - 1; ret.Display();*/ return 0; }
解决 无用评论 打赏 举报
悬赏问题
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!