class Date
{
public:
Date(int y = 1, int m = 1, int d = 1)
{
if (y <= 0 || m <= 0 || m > 12 || d <= 0 || d > getday(y, m))
{
_y = 1;
_m = 1;
_d = 1;
}
else
{
_y = y;
_m = m;
_d = d;
}
}
int getday(int y,int m)
{
static int _day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int day = _day[m];
if (m == 2&&((y%4==0&&y%100!=0)||y%400==0))
day++;
return day;
}
Date& operator+=(int day)
{
_d += day;
while (_d > getday(_y, _m))
{
_d -= getday(_y, _m);
_m++;
if (_m == 13)
{
_y++;
_m = 1;
}
}
return *this;
}
Date operator+(int day)
{
Date copy(*this);
copy += day;
return copy;
}
bool operator==(const Date& d)
{
return _y == d._y
&& _m == d._m
&& _d == d._d;
}
bool operator!=(const Date& d)
{
return !(*this== d);
}
Date operator-(int day)
{
Date ret(*this);
ret -= day;
return ret;
}
int operator-(const Date& d)
{
//计算相减问题转换为,小日期加天数等于大日期
//自己天数就是相减天数
Date max = *this;//假设原来的日期大
Date min = d;
int flag = 1;
if (max < min)
{
max = d;
min = *this;
flag = -1;
}
int day_n =0;
while (min < max)
{
min+=1;
day_n++;
}
return day_n*flag;
//返回值为正表示当前比传进来的日期大,反之小
}
Date& operator-=(int day)
{
_d -= day;
while (_d<0)
{
if (_d < 0)
_m--;
if (_m == 0)
{
_y--;
_m = 12;
}
//if (_y < 0)
_d += getday(_y,_m);
}
return *this;
}
bool operator>(const Date& d)
{
if (_y > d._y)
return true;
else if (_y == d._y)
{
if (_m > d._m)
return true;
else if (_m == d._m)
{
if (_d > d._d)
return true;
}
}
return false;
}
bool operator<(const Date& d)
{
/*if (_y < d._y)
return true;
else if (_y == d._y)
{
if (_m < d.m)
return true;
else if (_m == d._m)
{
if (_d < d._d)
return true;
}
}
return false;*/
return !(*this > d||*this==d);
}
bool operator<=(const Date& d)
{
return !(*this > d);
}
bool operator>=(const Date& d)
{
return (*this > d || *this == d);
//return !(*this < d);
}
private:
int _y;
int _m;
int _d;
};
class 运算符重载
猜你喜欢
转载自blog.51cto.com/14982125/2666768
今日推荐
周排行