对于日期类,我们主要实现一下日期类的基本函数,构造,拷贝构造,运算符的重载,析构。当然这里运算符的重载需要实现的还是挺多的,如:=、<、>、<=、>=、等
#include <iostream>
using namespace std;
class Date
{
public:
Date(int year = 1990, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}
Date(const Date& d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
~Date()
{}
//万年历
bool operator == (const Date& d)
{
return this->_year == d._year
&& this->_month == d._month
&& this->_day == d._day;
}
bool operator <(const Date& d)
{
if (_year<d._year)
{
return true;
}
else
{
if (_year == d._year)
{
if (_month < d._month)
{
return true;
}
else
{
if (_month == d._month)
{
if (_day < d._day)
{
return true;
}
}
}
}
}
return false;
}
bool operator <=(const Date& d)
{
return !(*this > d);
}
bool operator >(const Date& d)
{
if (_year>d._year)
{
return true;
}
else
{
if (_year == d._year)
{
if (_month > d._month)
{
return true;
}
else
{
if (_month == d._month)
{
if (_day > d._day)
{
return true;
}
}
}
}
}
return false;
}
bool operator >=(const Date& d)
{
return !(*this < d);
}
对于实现日期计算器,我们主要考虑的是加天数和减天数,那么问题就来了,对于加法,如果加的日期超过当前月的天数就需要考虑月的进位,对于年来说,如果月份大于12就需要重置为1,年进位。还需要考虑的一个问题就是,是否为闰年的2月份天数不同,那么应该如何解决呢?我们用一个数组把每个月的天数给保存起来,然后写一个判断闰年的函数,如果是闰年就在数组对应的2月上加上1天。对于减法,就相当于加上一个负天数,问题和加法一样。
// 日期计算器
Date operator+ (int day);
Date operator+= (int day);
Date operator- (int day)
{
this->_day -= day;
while (_day < 0)
{
_day += GetMonthDay(2016, 3);
_month -= 1;
if (_month < 1)
{
_month = 12;
_year -= 1;
}
}
return *this;
}
Date operator-= (int day);
Date operator++();
Date operator++(int);
Date operator--();
Date operator--(int);
int operator-(const Date& d);
//计算器
Date& calendar(int day = 0)
{
if (day > 0)//加正天数
{
this->_day += day;
while (_day > GetMonthDay(2016, 2))
{
_day -= GetMonthDay(2016, 2);
_month += 1;
if (_month > 12)
{
_month = 1;
_year += 1;
}
}
}
else//加负天数
{
this->_day -= day;
while (_day < 0)
{
_day += GetMonthDay(2016, 3);
_month -= 1;
if (_month < 1)
{
_month = 12;
_year -= 1;
}
}
}
return *this;
}
private:
bool IsLeapYear(int year)
{
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
{
return true;
}
return false;
}
int GetMonthDay(int year, int month)
{
int monthArray[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int day = monthArray[month];
if (month == 2 && IsLeapYear(year))
{
day += 1;
}
return day;
}
private:
int _year;
int _month;
int _day;
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。