基于C++實(shí)現(xiàn)簡(jiǎn)單日期計(jì)算器
更新時(shí)間:2020年05月18日 09:03:36 作者:pigdwh
這篇文章主要介紹了基于C++實(shí)現(xiàn)簡(jiǎn)單日期計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
基于C++編寫(xiě)的簡(jiǎn)單的日期計(jì)算器,供大家參考,具體內(nèi)容如下
以下代碼是在VS2013下編譯運(yùn)行的:
下面展示我的測(cè)試結(jié)果:

標(biāo)題
代碼如下:
#include<iostream>
using namespace std;
#include"vld.h"http://這個(gè)是檢測(cè)虛擬內(nèi)存是否泄露,我在這里安裝了vld,所以直接用,包含頭文件就好了
class Date
{
public:
//構(gòu)造函數(shù)
Date(int year=2018, int month=8, int day=16)
{
_year = year;
_month = month;
_day = day;
}
//析構(gòu)函數(shù)
~Date()
{
}
//拷貝構(gòu)造函數(shù)
Date(const Date& d)//必須傳引用,傳值會(huì)引發(fā)無(wú)窮遞歸調(diào)用
{
_year = d._year;
_month = d._month;
_day = d._day;
}
//賦值重載
Date& operator=(const Date& d)
{
if (this != &d)
{
this->_year = d._year;
this->_month = d._month;
this->_day = d._day;
}
return *this;
}
//打印輸出
void showDate()
{
cout << "原來(lái)的日期:" << _year << "-" << _month << "-" << _day << endl;
}
void showDate1()
{
cout << "加上指定天數(shù):" << _year << "-" << _month << "-" << _day<<endl;
}
void showDate2()
{
cout << "減去指定天數(shù):" << _year << "-" << _month << "-" << _day << endl;
}
void showDate3()
{
cout << "加等指定天數(shù):" << _year << "-" << _month << "-" << _day << endl;
}
void showDate4()
{
cout << "減等指定天數(shù):" << _year << "-" << _month << "-" << _day << endl;
}
void showDate5()
{
cout << "前置++:" << _year << "-" << _month << "-" << _day << endl;
}
void showDate6()
{
cout << "后置++:" << _year << "-" << _month << "-" << _day << endl;
}
void showDate7()
{
cout << "前置--:" << _year << "-" << _month << "-" << _day << endl;
}
void showDate8()
{
cout << "后置--:" << _year << "-" << _month << "-" << _day << endl;
}
void showDate9()
{
cout << "要比較的日期:" << _year << "-" << _month << "-" << _day << endl;
}
bool operator ==(const Date& d)//判斷兩個(gè)日期相等
{
return _year == d._year
&&_month == d._month
&&_day == d._day;
}
bool operator !=(const Date& d)//判斷兩個(gè)日期不相等
{
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);
}
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);
}
//是否是潤(rùn)年
bool IsLeapYear(int year)
{
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int GetDayByYearAndMonth(int year, int month)//判斷返回的月份的天數(shù)
{
int MonthDay[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (IsLeapYear(year) && month == 2)
{
return 29;
}
else{
return MonthDay[month];
}
}
//日期加上天數(shù),并不會(huì)改變?cè)瓉?lái)的日期值
Date operator+(int dayNum)
{
if (_day<0)
{
return *this -(-_day);
}
Date tmpDate(*this);//拷貝this指針
tmpDate._day += dayNum;
while (tmpDate._day > GetDayByYearAndMonth(_year, _month))
{
tmpDate._day = tmpDate._day -GetDayByYearAndMonth(tmpDate._year,tmpDate._month);
tmpDate._month += 1;
if (tmpDate._month > 12)
{
++tmpDate._year;
tmpDate._month = 1;
}
}
return tmpDate;
}
Date& operator+=(int days)// +=,會(huì)改變?cè)瓉?lái)的值,進(jìn)而在原來(lái)的值上面繼續(xù)加指定的天數(shù)
{
_day += days;
while (_day > GetDayByYearAndMonth(_year, _month))
{
_day =_day - GetDayByYearAndMonth(_year,_month);
_month += 1;
if (_month > 12)
{
++_year;
_month = 1;
}
}
return *this;
}
Date& operator++() //前置++
{
*this += 1;
return *this;
}
Date operator++(int)//后置++
{
Date tmpDate(*this);
*this += 1;
return *this;
}
//日期減去天數(shù),并不會(huì)改變?cè)瓉?lái)的日期值
Date operator-(int dayNum)
{
Date tmpDate(*this);
tmpDate._day -= dayNum;
while (tmpDate._day <0)
{
tmpDate._month -= 1;
if (tmpDate._month <= 0)
{
--tmpDate._year;
tmpDate._month = 12;
}
tmpDate._day += GetDayByYearAndMonth(tmpDate._year,tmpDate._month) ;
}
return tmpDate;
}
Date& operator-=(int dayNum)//-=,會(huì)改變?cè)瓉?lái)的值,進(jìn)而在原來(lái)的值上面繼續(xù)減指定的天數(shù)
{
_day -= dayNum;
while (_day <0)
{
_month -= 1;
if (_month <= 0)
{
--_year;
_month = 12;
}
_day += GetDayByYearAndMonth(_year,_month);
}
return *this;
}
Date& operator--()//前置–
{
*this -= 1;
return *this;
}
Date operator--(int)//后置 –
{
Date tmpDate(*this);//先對(duì)*this進(jìn)行拷貝
*this -= 1;
return *this;
}
int operator-( const Date& d) // 兩個(gè)日期相隔天數(shù)
{
Date big(*this);
Date small(d);
int day = 0;
int flags = 1;
if (big <small)
{
small = *this;
big = d;
flags *= -1;
}
while (small != big)
{
small =small+1;
++day;
}
return day*flags;
}
private://私有成員變量
int _year;
int _month;
int _day;
};
int main()
{
Date d1(2018,1,1);
d1.showDate();
Date d2;
d2 = d1 + 66;
d2.showDate1();
d2 = d1 + 1;
d2.showDate1();
Date d3;
d3 = d1 - 20;
d3.showDate2();
Date d4;
d4+=10;
d4.showDate3();
d4 += 10;
d4.showDate3();
Date d5;
d5 -= 10;
d5.showDate4();
d5-= 10;
d5.showDate4();
Date d6;
++d6;
d6.showDate5();
Date d7;
d7++;
d7.showDate6();
Date d8;
d8--;
d8.showDate7();
Date d9;
d9--;
d9.showDate8();
Date d10(2018, 8, 18);
d10.showDate9();
cout << "(d1 < d10):是否小于(1:表示小于 0表示:大于等于):"<<(d1 < d10) << endl;
Date d11(2018,1,1);
d11.showDate9();
cout <<"(d1 > d10):是否大于(1:表示大于 0表示小于等于)"<< (d1 > d10) << endl;
Date d12(2018,8,18);
d12.showDate9();
cout <<"(d1 >= d10):是否大于等于(0:表示小于 1表示:大于等于)"<< (d1 >= d10) << endl;
Date d13(2018,10,1);
d13.showDate9();
cout <<"(d1 <= d10):是否小于等于(1:表示小于等于 0表示:大于)"<< (d1 <= d10) << endl;
Date d14(2018,1,2);
d14.showDate();
cout << "兩個(gè)日期相距天數(shù):" <<(d1-d14) << endl;
system("pause");
return 0;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
全排列算法的非遞歸實(shí)現(xiàn)與遞歸實(shí)現(xiàn)的方法(C++)
本篇文章是對(duì)全排列算法的非遞歸實(shí)現(xiàn)與遞歸實(shí)現(xiàn)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
基于Matlab實(shí)現(xiàn)中國(guó)象棋的示例代碼
中國(guó)象棋是起源于中國(guó)的一種棋,屬于二人對(duì)抗性游戲的一種,在中國(guó)有著悠久的歷史。由于用具簡(jiǎn)單,趣味性強(qiáng),成為流行極為廣泛的棋藝活動(dòng)。本文將利用Matlab實(shí)現(xiàn)這一游戲,需要的可以參考一下2022-02-02
C++中的while循環(huán)和for循環(huán)語(yǔ)句學(xué)習(xí)教程
這篇文章主要介紹了C++中的while循環(huán)和for循環(huán)語(yǔ)句學(xué)習(xí)教程,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09
C++?ffmpeg實(shí)現(xiàn)將視頻幀轉(zhuǎn)換成jpg或png等圖片
有時(shí)播放實(shí)時(shí)流的時(shí)候有截圖的需求,需要將解碼出來(lái)的圖片保存本地或上傳服務(wù)器,這時(shí)就需要將avframe中的數(shù)據(jù)編碼成png、jpg等格式的圖片,我們使用ffmpeg的相關(guān)編碼器就可以實(shí)現(xiàn)功能,下面就來(lái)講講具體實(shí)現(xiàn)方法吧2023-03-03

