这钵啊, 这钵就是是骡子是马吗拉出来溜溜
这日期类的实现..也没什么好说的...我直接就把代码放这里了熬~
具体细节都写在里面了~
#include<iostream>
using namespace std;
class Date {
public:
Date(int year = 2000, int month = 9, int day = 28) {
if (year > 0 && month > 0 && month <= 12
&& day > 0 && day <= getMonthDay(year, month)) {
_year = year;
_month = month;
_day = day;
}
else {
cout << "日期不合法: " << year << "-" << month << "-" << day << endl;
cout << "重置为默认值: 2000-1-1";
_year = 2000;
_month = 1;
_day = 1;
}
}
int getMonthDay(int year, int month) {
static int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int day = days[month];
if (month == 2
&& (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
++day;
return day;
}
Date& operator+=(int day) {
if (day < 0) {
return *this -= day;
}
_day += day;
while (_day > getMonthDay(_year, _month)) {
_day -= getMonthDay(_year, _month);
++_month;
if (_month == 13) {
_month = 1;
_year++;
}
}
return *this;
}
Date& operator++() {
*this += 1;
return *this;
}
Date operator++(int) {
Date ret(*this);
*this += 1;
return ret;
}
void print() {
cout << _year << "-" << _month << "-" << _day << endl;
}
Date& operator-=(int day) {
if (day < 0) {
return *this += (-day);
}
_day -= day;
while (_day <= 0) {
_month--;
if (_month == 0) {
_month = 12;
_year--;
}
_day += getMonthDay(_year, _month);
}
return *this;
}
Date& operator--() {
*this -= 1;
return *this;
}
Date operator--(int) {
Date ret(*this);
*this -= 1;
return ret;
}
Date operator+(int day) {
Date ret(*this);
ret += day;
return ret;
}
Date operator-(int day) {
Date ret(*this);
ret -= day;
return ret;
}
bool operator==(const Date& date) {
return _year == date._year
&& _month == date._month
&& _day == date._day;
}
bool operator>(const Date& date) {
if (_year > date._year)
return true;
else if (_year == date._year) {
if (_month > date._month)
return true;
else if (_month == date._month) {
if (_day > date._day)
return true;
}
}
return false;
}
bool operator>=(const Date& date) {
return (*this > date) || (*this == date);
}
bool operator<(const Date& date) {
return !(*this >= date);
}
bool operator<=(const Date& date) {
return !(*this > date);
}
bool operator!=(const Date& date) {
return !(*this == date);
}
int operator-(Date& date) {
Date d1(*this);
Date d2(date);
int num = 0;
if (d1 > d2) {
while (d1 > d2) {
d1--;
num++;
}
return num;
}
else {
while (d1 < d2) {
d1++;
num++;
}
return -num;
}
}
int _year;
int _month;
int _day;
};
ostream& operator<<(ostream& _cout, const Date& date)
{
_cout << date._year << " " << date._month << " " << date._day << endl;
return _cout;
}
void test() {
Date d(2020, 5, 1);
d.print();
d += 20;
d.print();
d += 20;
d.print();
Date d2(2020, 12, 6);
d2.print();
d2 += 90;
d2.print();
d2 += 3650;
d2.print();
++d2;
d2.operator++();
d2.print();
d2.operator++(0);
d2.print();
d2++;
d2.print();
}
void test2() {
Date d(2020, 5, 20);
d.print();
cout << "前置++ " << endl;
cout << (++d) << endl;
d.print();
cout << "后置++ " << endl;
cout << (d++) << endl;
d.print();
}
void test3() {
Date d(2020, 5, 24);
d.print();
d -= 30;
d.print();
d -= -30;
d.print();
d -= 3650;
d.print();
}
void test4() {
Date d1(2020, 5, 25);
Date d2(2020, 5, 25);
Date d3(2020, 5, 26);
Date d4(2020, 5, 23);
cout << (d1 > d4) << endl;
cout << (d1 >= d4) << endl;
cout << (d1 < d4) << endl;
cout << (d1 <= d4) << endl;
cout << (d3 > d1) << endl;
cout << (d1 > d4) << endl;
cout << (d1 == d2) << endl;
cout << (d1 == d4) << endl;
}
void test5() {
Date d1(2020, 5, 25);
Date d2 = d1 + 3650;
cout << (d1 - d2) << endl;
cout << (d2 - d1) << endl;
Date d3 = d2 + 200;
cout << (d3 - d2) << endl;
cout << (d2 - d3) << endl;
}
int main() {
test5();
return 0;
}