#include<iostream>
using namespace std;
class Date{
public:
Date(int year=1996,int month=7,int day=30)
: _year(year)
, _month(month)
, _day(day)
{
if (!((year > 0)
&& (month > 0 && month<13)
&& (day>0 && day < CheckDay(year,month)))){
cout << "输入的日期不合法!" << endl;
}
}
//判断是否闰年
bool IsLeapYear(int year)
{
if ((0 == year % 4 && 0 != year / 100) || (0 == year % 400))
return true;
return false;
}
Date operator+(int days);//当前日期加n天后的日期
Date operator-(int days);//当前日期减n天后的日期
int operator-(const Date& d);//两个日期相隔的天数
bool operator>(const Date& d);
bool operator==(const Date& d)const;
bool operator!=(const Date& d);
Date& operator++();
Date operator++(int);
Date& operator--();
Date operator--(int);
friend ostream& operator<<(ostream& _cout, const Date d){
cout << "Date: " << d._year << "-" << d._month << "-" << d._day;
return _cout;
}
private:
int CheckDay(int year,int month)
{
int Monthdays[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (month == 2 && IsLeapYear(year)){
return Monthdays[month] = 29;
}
else{
return Monthdays[month];
}
}
private:
int _year;
int _month;
int _day;
};
Date Date::operator+(int days){
if (days<0){
return *this - (0 - days);
}
Date temp(*this);
temp._day += days;
int Monthday = CheckDay(temp._year, temp._month);
while (temp._day > Monthday){
temp._day -= Monthday;
temp._month++;
if (temp._month > 12){
temp._year++;
temp._month = 1;
}
}
return temp;
}
Date Date::operator-(int days){
if (days < 0){
return *this + (0 - days);
}
Date temp(*this);
temp._day -= days;
while (temp._day <= 0){
temp._month -= 1;
if (temp._month < 1){
temp._year -= 1;
temp._month = 12;
}
temp._day += CheckDay(temp._year, temp._month);
}
return temp;
}
int Date::operator-(const Date& d){
Date minDate(*this);
Date maxDate(d);
if (minDate > maxDate){
minDate = d;
maxDate = *this;
}
int cout = 0;
while (minDate != maxDate){
cout++;
++minDate;
}
return cout;
}
bool Date::operator>(const Date& d){
if ((_year > d._year) ||
(_year == d._year&&_month > d._month) ||
(_year == d._year&&_month > d._month&&_day > d._day))
return true;
return false;
}
bool Date::operator==(const Date& d)const{
return _year == d._year&&
_month == d._month&&
_day == d._day;
}
bool Date::operator!=(const Date& d){
return !(*this == d);
}
Date& Date::operator++(){
*this = *this + 1;
return *this;
}
Date Date::operator++(int){
Date temp(*this);
*this = *this + 1;
return temp;
}
Date& Date::operator--(){
*this = *this - 1;
return *this;
}
Date Date::operator--(int){
Date temp(*this);
*this = *this - 1;
return temp;
}
void FunTest(){
Date d1(1996, 9, 12);
Date d2(d1);
cout << d2 << endl;
d2 = d1 + 10000;
cout << d2 << endl;
Date d3(d1);
d3 = d1 - 100;
cout << d3 << endl;
Date d4(1996, 6, 4);
int tmp = 0;
tmp = d4 - d1;
cout << tmp << endl;
}
int main(){
FunTest();
return 0;
}
C++_02_C++实现日期类
最新推荐文章于 2024-02-02 15:05:15 发布