定义日期类Date,包括年、月、日3个成员变量,在其中重载运算符“+”、“-”、“++”、“–”。
注意:需要考虑每个月不同天数及闰年问题。
(面向对象程序设计基础)
#include<iostream>
using namespace std;
class Date {
private:
int year, month, day;
public:
Date(int y = 0, int m = 0, int d = 0) {
year = y;
month = m;
day = d;
}
void Print();
Date operator-(const Date &c);
Date operator+(const Date &c);
Date operator++();
Date operator--();
};
void Date::Print() {
cout << "DATE:"<<year<<"/"<<month<<"/"<<day<< endl;
}
Date Date::operator-(const Date &c) {
int temp = 0,day_y=0;
if (c.year - year >= 1) {
for (int n = year; n < c.year; n++) {
if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0) { day_y = day_y + 366; }
else { day_y = day_y + 365; }
}
}
for (int i = 1; i < month; i++) {
switch (i) {
case 1: temp += 31; break;
case 2: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { temp += 29; break; }
else { temp += 28; break; }
case 3: temp += 31; break;
case 4: temp += 30; break;
case 5: temp += 31; break;
case 6: temp += 30; break;
case 7: temp += 31; break;
case 8: temp += 31; break;
case 9: temp += 30; break;
case 10:temp += 31; break;
case 11:temp += 30; break;
case 12:temp += 31; break;
}
}
int sum1 = temp;
temp = 0;
for (int i = 1; i < c.month; i++) {
switch (i) {
case 1: temp += 31; break;
case 2: if ((c.year % 4 == 0 && c.year % 100 != 0) || c.year % 400 == 0) { temp += 29; break; }
else { temp += 28; break; }
case 3: temp += 31; break;
case 4: temp += 30; break;
case 5: temp += 31; break;
case 6: temp += 30; break;
case 7: temp += 31; break;
case 8: temp += 31; break;
case 9: temp += 30; break;
case 10:temp += 31; break;
case 11:temp += 30; break;
case 12:temp += 31; break;
}
}
int sum2 = temp;
day_y = day_y - sum1 + sum2+c.day-day;
cout << "相隔天数"<<day_y<< endl;
return (0, 0, 0);
};
Date Date::operator+(const Date &c) {
int sumday = 0,temp=0,j=0,k=0;
for (int i = 1; i < month; i++) {
switch (i) {
case 1: temp += 31; break;
case 2: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { temp += 29; break; }
else { temp += 28; break; }
case 3: temp += 31; break;
case 4: temp += 30; break;
case 5: temp += 31; break;
case 6: temp += 30; break;
case 7: temp += 31; break;
case 8: temp += 31; break;
case 9: temp += 30; break;
case 10:temp += 31; break;
case 11:temp += 30; break;
case 12:temp += 31; break;
}
}
sumday = temp + c.day+day;
for( k= year; sumday > 365; k++) {
if ((k % 4 == 0 && k % 100 != 0) || k % 400 == 0) { sumday = sumday - 366; }
else(sumday = sumday - 365);
}
year = k;
for (j = 1; sumday >28; j++) {
switch (j) {
case 1: temp = 31; break;
case 2: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { temp = 29; break; }
else { temp = 28; break; }
case 3: temp = 31; break;
case 4: temp = 30; break;
case 5: temp = 31; break;
case 6: temp = 30; break;
case 7: temp = 31; break;
case 8: temp = 31; break;
case 9: temp = 30; break;
case 10:temp = 31; break;
case 11:temp = 30; break;
case 12:temp = 31; break;
}
sumday = sumday - temp;
}
return Date(year,j,sumday);
};
Date Date::operator++() {
int temp = 0,i=month;
switch (i) {
case 1: temp += 31; break;
case 2: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { temp += 29; break; }
else { temp += 28; break; }
case 3: temp += 31; break;
case 4: temp += 30; break;
case 5: temp += 31; break;
case 6: temp += 30; break;
case 7: temp += 31; break;
case 8: temp += 31; break;
case 9: temp += 30; break;
case 10:temp += 31; break;
case 11:temp += 30; break;
case 12:temp += 31; break;
}
if (temp == day&&month!=12) {
month++;
day = 1;
}
else if (temp == day && month == 12) {
year++;
month = 1;
day = 1;
}
else {
day++;
}
return *this;
}
Date Date::operator--() {
int temp = 0, i = month-1;
switch (i) {
case 0:break;
case 1: temp += 31; break;
case 2: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { temp += 29; break; }
else { temp += 28; break; }
case 3: temp += 31; break;
case 4: temp += 30; break;
case 5: temp += 31; break;
case 6: temp += 30; break;
case 7: temp += 31; break;
case 8: temp += 31; break;
case 9: temp += 30; break;
case 10:temp += 31; break;
case 11:temp += 30; break;
}
if (day==1&& month != 1) {
month--;
day = temp;
}
else if (day ==1&& month == 1) {
year--;
month = 12;
day = 31;
}
else {
day--;
}
return *this;
}
int main() {
Date d1(2004, 12,31), d2(2018, 10, 15);
d1.Print();
d2.Print();
d1-d2;
cout << endl;
Date d3(2004, 1, 1), d4(0, 0,1928),d5;
d5 = d3 + d4;
d5.Print();
cout<<endl<<"日期自增↓"<<endl;
d1.Print();
++d1 ;
d1.Print();
cout << endl << "日期自减" << endl;
d1.Print();
--d1;
d1.Print();
system("pause");
return 0;
}