如下所示:
#include<iostream>using namespace std;class Date{public: Date(int year = 1900,int month = 1,int day = 1) //构造 :_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,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 << "请输入一个日期" << 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,3); Date d2(2015,11,1); cout << (d1 - d2) << endl; //Date d1(2015,3); //Date ret = d1 + 40; //operator+ //ret.display(); /*Date d1(2015,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++实现日期类(Date类)的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的C++实现日期类(Date类)的方法全部内容,希望文章能够帮你解决C++实现日期类(Date类)的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)