基于C++實現(xiàn)簡單日期計算器
更新時間:2020年05月18日 09:03:36 作者:pigdwh
這篇文章主要介紹了基于C++實現(xiàn)簡單日期計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
基于C++編寫的簡單的日期計算器,供大家參考,具體內(nèi)容如下
以下代碼是在VS2013下編譯運行的:
下面展示我的測試結(jié)果:
標(biāo)題
代碼如下:
#include<iostream> using namespace std; #include"vld.h"http://這個是檢測虛擬內(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)//必須傳引用,傳值會引發(fā)無窮遞歸調(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 << "原來的日期:" << _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)//判斷兩個日期相等 { return _year == d._year &&_month == d._month &&_day == d._day; } 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); } 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 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ù),并不會改變原來的日期值 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)// +=,會改變原來的值,進(jìn)而在原來的值上面繼續(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ù),并不會改變原來的日期值 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)//-=,會改變原來的值,進(jìn)而在原來的值上面繼續(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);//先對*this進(jìn)行拷貝 *this -= 1; return *this; } int operator-( const Date& d) // 兩個日期相隔天數(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 << "兩個日期相距天數(shù):" <<(d1-d14) << endl; system("pause"); return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言中實現(xiàn)自定義數(shù)據(jù)類型的輸入輸出的方法和技巧
在 C 語言中,除了基本的數(shù)據(jù)類型(如整型、浮點型、字符型等),我們還經(jīng)常需要自定義數(shù)據(jù)類型來滿足特定的編程需求,所以本文給大家介紹了C語言中實現(xiàn)自定義數(shù)據(jù)類型的輸入輸出的方法和技巧,需要的朋友可以參考下2024-07-07C++ 復(fù)制控制之復(fù)制構(gòu)造函數(shù)的實現(xiàn)
所謂的“復(fù)制控制”即通過這三個成員函數(shù)控制對象復(fù)制的過程,本文主要介紹了C++ 復(fù)制控制之復(fù)制構(gòu)造函數(shù)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-11-11C++函數(shù)三種傳參形式(指針傳遞、引用傳遞、值傳遞)
不論是哪種參數(shù)傳遞方式,都有形參和實參之分,本文主要介紹了C++函數(shù)三種傳參形式(指針傳遞、引用傳遞、值傳遞),具有一定的參考價值,感興趣的可以了解一下2024-03-03C++歸并法+快速排序?qū)崿F(xiàn)鏈表排序的方法
這篇文章主要介紹了C++歸并法+快速排序?qū)崿F(xiàn)鏈表排序的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04