日期类,日期相减,实现日期的下一天
两个日期 相减
日期 + 天数 得到的日期
具体要求:实现类date,其中
构造函数包括year,month,day三个参数
重载两个date类之间的-,以及date类的+=,-=
使用int year(),int month(),int day()返回三个参数
#include <iostream>
using namespace std;
class date {
private:
int y;
int m;
int d;
public:
date(int, int, int);
int year();
int month();
int day();
date operator++ ();
date operator++ (int);
date operator-- ();
date operator-- (int);
friend int operator- (const date &dt1, const date &dt2);
friend void operator+= (date &dt, const int n);
friend void operator-= (date &dt, const int n);
};
date::date(int year = 0, int month = 0, int day = 0) {
y = year;
m = month;
d = day;
}
int date::year() {
return y;
}
int date::month() {
return m;
}
int date::day() {
return d;
}
date date::operator++ () {
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) {
days[1]++;
}
if (d != days[m - 1]) {
d++;
} else {
d = 1;
if (m != 12) {
m++;
} else {
m = 1;
y++;
}
}
return * this;
}
date date::operator++ (int day) {
date dt(*this);
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) {
days[1]++;
}
if (d != days[m - 1]) {
d++;
} else {
d = 1;
if (m != 12) {
m++;
} else {
m = 1;
y++;
}
}
return dt;
}
date date::operator-- () {
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) {
days[1]++;
}
if(d == 1) {
if (m == 1) {
d = 31;
m = 12;
y--;
} else {
m--;
d = days[m - 1];
}
} else {
d--;
}
return * this;
}
date date::operator-- (int day) {
date dt(*this);
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) {
days[1]++;
}
if(d == 1) {
if (m == 1) {
d = 31;
m = 12;
y--;
} else {
m--;
d = days[m - 1];
}
} else {
d--;
}
return dt;
}
int operator- (const date &dt1, const date &dt2) {
date dtemp(dt2);
int count = 0;
while (dt1.y != dtemp.y || dt1.m != dtemp.m || dt1.d != dtemp.d) {
count++;
dtemp++;
}
return count;
}
void operator+= (date &dt, const int n) {
for (int i = 0; i < n; i++) {
dt++;
}
}
void operator-= (date &dt, const int n) {
for (int i = 0; i < n; i++) {
dt--;
}
}
int main(void) {
using std::cin;
using std::cout;
using std::endl;
date D1,D2;
int year;
int month;
int day;
cin >> year >> month >> day; //shu ru di yi ge ri qi
D1 = date(year, month, day);
cin >> year >> month >> day; //shu ru di er ge ri qi
D2 = date(year, month, day);
cout << D2 - D1 << endl;
cin >> day; //shu ru yao jia jian de tian shu,
D1 += day;
D2 -= day;
cout << D1.year() << " " << D1.month() << " " << D1.day() << endl;
cout << D2.year() << " " << D2.month() << " " << D2.day() << endl;
return 0;
}