日期计数器:C++实现
程序员文章站
2022-07-06 12:00:47
日期计数器实现:在程序中定义日期类:class date{};,主要运用操作符重载知识在其中实现:日期加或减一定天数,日期减日期相差天数,两日期的各种比较与日期输入输出等功能。
具体代码实现:...
日期计数器实现:在程序中定义日期类:class date{};,主要运用操作符重载知识在其中实现:日期加或减一定天数,日期减日期相差天数,两日期的各种比较与日期输入输出等功能。
具体代码实现:
#include #include using namespace std; class data { friend ostream& operator<<(ostream& _cout, const data& d); friend istream& operator>>(istream& _cin, data& d); public: data(const int year=1900,const int month=1,const int day=1) :_year(year) ,_month(month) ,_day(day) {} data(const data& data) { _year=data._year; _month=data._month; _day=data._day; } ~data() {} int getdaysinmonth(int year,int month); //获取每个月的天数 bool isleapyear(int year); //判断闰年 bool isvalidata(); //判断日期是否合法 data & operator =(const data &d); data operator+(int day); data operator -(int day); int operator -(const data &d); data &operator --(); data operator --(int); data &operator ++(); data operator ++(int); bool operator >(const data &d); bool operator <(const data &d); bool operator >=(const data &d); bool operator <=(const data &d); bool operator ==(const data &d); bool operator !=(const data &d); private: int _year; int _month; int _day; }; bool data::isleapyear(int year) //判断闰年 { return ((year%4==0)&&(year%100!=0))||(year%400==0)?true:false; } bool data::isvalidata() //判断日期是否合法 { if((_year>=1900)&&((_month>0)&&(_month<13))&& ((_day<=getdaysinmonth(_year,_month))&&(_day>0))) { return true; } return false; } int data::getdaysinmonth(int year,int month) //获取每个月的天数 { int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if(isleapyear(year)&&(month==2)) { days[month]++; } return days[month]; } ostream& operator<<(ostream& _cout, const data& d) { _cout<>(istream& _cin, data& d) { _cin>>d._year>>d._month>>d._day; return _cin; } data & data:: operator =(const data &d) { if(this != &d) { _year=d._year; _month=d._month; _day=d._day; } return *this; } data data::operator+(int day) { if(day<0) { day=0-day; return *this-day; } data tmp(*this); tmp._day+=day; while(tmp._day>getdaysinmonth(tmp._year,tmp._month)) { tmp._day-=getdaysinmonth(tmp._year,tmp._month); tmp._month++; if(tmp._month==13) { tmp._month=1; tmp._year++; } } return tmp; } data data:: operator -(int day) { if(day<0) { day=0-day; return *this+day; } data tmp(*this); tmp._day-=day; while(tmp._day<=0) { tmp._month--; if(tmp._month==0) { tmp._month=12; tmp._year--; } tmp._day+=getdaysinmonth(tmp._year,tmp._month); } return tmp; } int data::operator -(const data &d) { int count=0; if(*this>d) { data tmp=d; while(tmp!=*this) { tmp++; count++; } return count; } else { data tmp=*this; while(tmp!=d) { tmp++; count++; } return count; } } data & data::operator ++() //前置++ { _day+=1; if(_day>getdaysinmonth(_year,_month)) { _month++; if(_month==13) { _year++; _month=1; } _day=1; } return *this; } data data::operator ++(int) //后置++ { data tmp=*this; _day+=1; if(_day>getdaysinmonth(_year,_month)) { _month++; if(_month==13) { _year++; _month=1; } _day=1; } return tmp; } data & data::operator --() //前置-- { _day-=1; if(_day==0) { _month--; if(_month==0) { _year--; _month=12; } _day=getdaysinmonth(_year,_month); } return *this; } data data::operator --(int) //后置-- { data tmp=*this; _day-=1; if(_day==0) { _month--; if(_month==0) { _year--; _month=12; } _day=getdaysinmonth(_year,_month); } return tmp; } bool data::operator >(const data &d) { if(_year>d._year) { return true; } else if(_year==d._year) { if(_month>d._month) { return true; } else if(_month==d._month) { if(_day>d._day) { return true; } } } return false; } bool data::operator <(const data &d) { if(_year=(const data &d) { return !(*thisd); } bool data::operator ==(const data &d) { return (_year==d._year)&&(_month==d._month)&&(_day==d._day); } bool data::operator !=(const data &d) { return !(*this==d); }
//测试函数 void test1() { data d1(2016,9,30); data d2(2016,10,6); d1=d2; d2=d2+999; d1=d1-999; data d=--d2; d=d2--; data d3(2016,9,30); data d4(2001,10,6); int ret=d3-d4; cout<d2) {cout<<"d1>d2"<=d6) {cout<<"d5>=d6"<
上一篇: iOS App 签名的原理