此次的设计是一个日期类,其目的是实现时期的相关运算,运用的主要知识是运算符的重载,类的相关知识
代码如下:
#include<iostream>
using namespace std;
class Date
{
public:
//构造函数
Date(int year = 2017, int month = 9, int day = 10)
: _year(year)
, _month(month)
, _day(day)
{
if (!((year > 0) && (month > 0) && (month < 13) && (day > 0) && (day < 32)))
{
_year = 1900;
_month = 1;
_day = 1;
}
}
//拷贝构造函数
Date(const Date& d)
:_year(d._year)
, _month(d._month)
, _day(d._day)
{
}
//
Date& operator=(const Date& d)
{
if (*this != d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
return *this;
}
// 前置++
Date& operator++()
{
*this = *this + 1;
return *this;
}
// 后置++
Date operator++(int)
{
Date temp(*this);
++*this;
return temp;
}
//前置--
Date& operator--()
{
*this =*this -1;
return *this;
}
//后置--
Date operator--(int)
{
Date temp(*this);
--*this;
return temp;
}
//days天之后的日期
Date operator+(int days)
{
if (days < 0)
{
return *this - (0 - days);
}
Date temp(*this);
temp._day += days;
int dayinmonth = temp.DayInMonth(temp._month);
while (temp._day > dayinmonth)
{
temp._day -= dayinmonth;
temp._month += 1;
if (temp._month > 12)
{
temp._year += 1;
temp._month = 1;
}
}
return temp;
}
// days天之前的日期
Date operator-(int days)
{
if (days < 0)
{
return *this + (0 - days);
}
Date temp(*this);
temp._day -= days;
int dayinmonth = temp.DayInMonth(temp._month);
while (temp._day < dayinmonth)
{
temp._day += dayinmonth;
temp._month -= 1;
if (temp._month < 1)
{
temp._year -= 1;
temp._month = 12;
}
temp._day += temp.DayInMonth(temp._month);
}
return temp;
}
// 两个日期之间的距离
int operator-(const Date& d)
{
Date maxdate(*this);
Date mindate(d);
if (mindate > maxdate)
{
maxdate = d;
mindate = *this;
}
int count = 0;
while (mindate < maxdate)
{
mindate = mindate + 1;
++count;
}
return count;
}
bool operator==(const Date& d)
{
if ((_year == d._year)&&(_month == d._month)&&(_day == d._day))
{
return true;
}
return false;
}
bool operator!=(const Date& d)
{
return (*this == d);
}
bool 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 operator<(const Date& d)
{
return !((*this == d)&&(*this > d));
}
friend ostream &operator<<(ostream &_cout, const Date d)
{
_cout << "year: " << d._year << "month: " << d._month << "day: "
<< d._day << endl;
return _cout;
}
int DayInMonth(int month)//取得每个月的天数
{
int days[] = { 0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if ((0 == _year % 4) && (0 != _year % 100) && (2 == month))
{
days[month] += 1;
}
return days[month];
}
private:
int _year;
int _month;
int _day;
};
void FunTest()
{
Date d1(2016, 9, 22);
Date d;
cout << ++d1;
cout << d1++;
cout << d1;
cout << --d1;
cout << d1--;
cout << d1;
cout << d1+100;
cout << d1-100;
cout << d - d1;
}
int main()
{
FunTest();
return 0;
}