C++實(shí)現(xiàn)日期類(Date類)的方法
更新時(shí)間:2017年01月11日 08:48:56 投稿:jingxian
下面小編就為大家?guī)?lái)一篇C++實(shí)現(xiàn)日期類(Date類)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
如下所示:
#include<iostream>
using namespace std;
class Date
{
public:
Date(int year = 1900, int month = 1, int day = 1) //構(gòu)造
:_year(year)
, _month(month)
, _day(day)
{
if (!isInvalidDate(_year, _month, _day))
{
_year = 1900;
_month = 1;
_day = 1;
}
}
Date operator+(int count)
{
Date tmp(*this);
tmp._day += count;
ToCorrect(tmp);
return tmp;
}
Date operator-(int count)
{
Date tmp(*this);
tmp._day -= count;
ToCorrect(tmp);
return tmp;
}
Date& operator++() //前置++
{
(*this)++;
return *this;
}
Date operator++(int) //后置++
{
Date tmp(*this);
(*this)+=1;
return tmp;
}
Date& operator--()
{
(*this)--;
return *this;
}
Date operator--(int)
{
Date tmp(*this);
(*this)--;
return tmp;
}
int operator-(const Date &d)
{
int flag = 1;
Date max = *this;
Date min = d;
if (*this<d)
{
max = d;
min = *this;
flag = -1;
}
int count=0;
while (min != max)
{
++min;
count++;
}
return count*flag;
}
Date& operator+=(int day)
{
*this = *this + day;
return *this;
}
bool operator!=(const Date &d)
{
return !(*this == d);
}
bool operator<(const Date &d)
{
return !((*this>d)||(*this==d));
}
bool operator>=(const Date &d)
{
return !(*this<d);
}
bool operator>(const Date &d)
{
return (_year > d._year
|| (_year == d._year && _month > d._month)
|| (_year == d._year && _month == d._month && _day > d._day));
}
bool operator==(const Date &d)
{
return ((_year == d._year) && (_month == d._month) && (_day == d._day));
}
public:
bool IsLeapYear(int year)
{
if(year % 400 || (year % 4 && year % 100))
return true;
return false;
}
int YearsOfMonth(int year, int month)
{
int day;
int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
day = days[month];
if (month == 2)
day += IsLeapYear(year);
return day;
}
Date ToCorrect(Date &d)
{
if (d._day>YearsOfMonth(d._year, d._month))
{
while (d._day > YearsOfMonth(d._year, d._month))
{
d._day -= YearsOfMonth(d._year,d._month);
if (d._month == 12)
{
d._year++;
d._month = 1;
}
else
{
++d._month;
}
}
}
else
{
while (d._day <= 0)
{
if (d._month == 1)
{
d._year--;
d._month = 12;
}
else
{
--d._month;
}
d._day += YearsOfMonth(d._year, d._month);
}
}
return d;
}
bool isInvalidDate(int year, int month, int day)
{
if ((year < 1) || (month<0 || month>12) || (day<0 || day>YearsOfMonth(year,month)))
return false;
return true;
}
void Display()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
friend istream& operator>>(istream& is, Date &d);
friend ostream& operator<<(ostream& os, const Date &d);
private:
int _year;
int _month;
int _day;
};
istream& operator>>(istream& is, Date& d)
{
cout << "請(qǐng)輸入一個(gè)日期" << endl;
is >> d._year >> d._month >> d._day;
return is;
}
ostream& operator<<(ostream& os, const Date &d)
{
cout << d._year << "-" <<d. _month << "-" << d._day << endl;
return os;
}
int main()
{
/*Date d1(2016,8,18);
//d1.Display();
//d1 = d1++;
cout << d1 << endl;*/
//Date d1(2015, 12, 3);
//(d1++).Display(); //d1.operator++(&d1, 0);
//(++d1).Display(); //d1.operator++(&d1);
Date d1(2015, 12, 3);
Date d2(2015, 11, 1);
cout << (d1 - d2) << endl;
//Date d1(2015, 12, 3);
//Date ret = d1 + 40; //operator+
//ret.Display();
/*Date d1(2015, 12, 3);
Date ret = d1 + 40;
d1 = ret;
ret = d1 - 40;
ret.Display();*/
/*Date ret;
Date d2(2015, 1, 1);
ret = d2 - 1;
ret.Display();*/
return 0;
}
以上這篇C++實(shí)現(xiàn)日期類(Date類)的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言文件讀寫(xiě)操作介紹與簡(jiǎn)單示例
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言文件讀寫(xiě)操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
C語(yǔ)言實(shí)現(xiàn)消消樂(lè)游戲的代碼分享
本章我們將編寫(xiě)十字消除游戲,用戶點(diǎn)擊空白方塊,沿其上下左右方向?qū)ふ业谝粋€(gè)彩色方塊,如果有兩個(gè)或兩個(gè)以上顏色一致,就將其消除,感興趣的可以了解一下2023-02-02
關(guān)于win32 gettimeofday替代方案
下面小編就為大家?guī)?lái)一篇關(guān)于win32 gettimeofday替代方案。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
c與c++之間的相互調(diào)用及函數(shù)區(qū)別示例詳解
這篇文章主要為大家介紹了c與c++相互調(diào)用的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
C語(yǔ)言動(dòng)態(tài)順序表實(shí)例代碼
大家好,本篇文章主要講的是C語(yǔ)言動(dòng)態(tài)順序表實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
C語(yǔ)言實(shí)現(xiàn)繪制可愛(ài)的橘子鐘表
這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)繪制可愛(ài)的橘子鐘表,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下2022-12-12

