Date.h
# include <Windows.h>
# include <iostream>
using namespace std;
class Date
{
public:
int GetMonthDay ( int year, int month) ;
Date ( int year = 1 , int month = 1 , int day = 1 ) ;
void Print ( ) const ;
bool operator< ( const Date& d) ;
bool operator== ( const Date& d) ;
bool operator<= ( const Date& d) ;
bool operator> ( const Date& d) ;
bool operator>= ( const Date& d) ;
bool operator!= ( const Date& d) ;
Date& operator+= ( int day) ;
Date operator+ ( int day) ;
Date& operator-= ( int day) ;
Date operator- ( int day) ;
Date& operator++ ( ) ;
Date operator++ ( int ) ;
Date& operator-- ( ) ;
Date operator-- ( int ) ;
int operator- ( const Date& d) ;
private:
int _year;
int _month;
int _day;
} ;
1. GetMonthDay
int Date:: GetMonthDay ( int year, int month)
{
const static int monthArray[ 13 ] = { 0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 } ;
if ( month == 2
&& ( ( year % 4 == 0 && year % 100 != 0 ) || ( year % 400 == 0 ) ) )
{
return 29 ;
}
return monthArray[ month] ;
}
2. Date构造函数
Date:: Date ( int year, int month, int day)
{
int flag = 0 ;
while ( month < 1 || month > 12
|| day < 1 || day > GetMonthDay ( year, month) )
{
cout << "非法日期,请重新输入:" << endl;
cin >> year >> month >> day;
flag = 1 ;
}
if ( flag == 1 )
{
cout << "日期合法" << endl;
}
_year = year;
_month = month;
_day = day;
}
3. Print
void Date:: Print ( ) const
{
cout << _year << " 年 " << _month << " 月 " << _day << " 日 " << endl;
}
4. Date 的比较
bool Date:: operator< ( const Date& d)
{
if ( _year < d. _year)
{
return true;
}
else if ( _year == d. _year && _month < d. _month)
{
return true;
}
else if ( _year == d. _year && _month == d. _month && _day < d. _day)
{
return true;
}
else
{
return false;
}
}
bool Date:: operator== ( const Date& d)
{
return _year == d. _year
&& _month == d. _month
&& _day == d. _day;
}
bool Date:: operator<= ( const Date& d)
{
return * this < d || * this == d;
}
bool Date:: operator> ( const Date& d)
{
return ! ( * this <= d) ;
}
bool Date:: operator>= ( const Date& d)
{
return ! ( * this < d) ;
}
bool Date:: operator!= ( const Date& d)
{
return ! ( * this == d) ;
}
5. += 、+、- =、-
Date& Date:: operator+= ( int day)
{
if ( day < 0 )
{
return * this -= ( - day) ;
}
_day += day;
while ( _day > GetMonthDay ( _year, _month) )
{
_day -= GetMonthDay ( _year, _month) ;
++ _month;
if ( _month == 13 )
{
++ _year;
_month = 1 ;
}
}
return * this;
}
Date Date:: operator+ ( int day)
{
Date tmp ( * this) ;
tmp += day;
return tmp;
}
Date& Date:: operator-= ( int day)
{
if ( day < 0 )
{
return * this += ( - day) ;
}
_day -= day;
while ( _day <= 0 )
{
-- _month;
if ( _month == 0 )
{
-- _year;
_month = 12 ;
}
_day += GetMonthDay ( _year, _month) ;
}
return * this;
}
Date Date:: operator- ( int day)
{
Date tmp ( * this) ;
tmp -= day;
return tmp;
}
6. ++、- -(含前后置)
Date& Date:: operator++ ( )
{
* this += 1 ;
return * this;
}
Date Date:: operator++ ( int )
{
Date tmp ( * this) ;
* this += 1 ;
return tmp;
}
Date& Date:: operator-- ( )
{
* this -= 1 ;
return * this;
}
Date Date:: operator-- ( int )
{
Date tmp ( * this) ;
* this -= 1 ;
return tmp;
}
7. 两日期相减(operator-)
int Date:: operator- ( const Date& d)
{
Date max = * this;
Date min = d;
int flag = 1 ;
if ( * this < d)
{
max = d;
min = * this;
flag = - 1 ;
}
int n = 0 ;
while ( min != max)
{
++ min;
++ n;
}
return n * flag;
}