/****************************************************************************************** Date.hpp: Copyright (c) Bit Software, Inc.(2013), All rights reserved. Purpose: 声明并实现一个万年历类【腾讯面试题】 Author: xxx Created Time: 2015-4-26 ******************************************************************************************/ class Time { public: Time(int hour = 1) { _hour = hour; } Time(const Time& t) { _hour = t._hour; } Time& operator=(const Time& t) { this->_hour = t._hour; return *this; } private: int _hour; }; class Date { public: // 初始化列表进行初始化。 Date (int year = 1900, int month = 1, int day = 1, const Time& t = 1) :_year(year) ,_month(month) ,_day(day) ,_t(t) {} Date (const Date& d) :_year(d._year) ,_month(d._month) ,_day(d._day) ,_t(d._t) {} Date& operator=(const Date& d) { _year = d._year; _month = d._month; _day = d._day; _t = d._t; return *this; } void Display () { cout<<_year<<"-"<<_month<<"-"<<_day<<endl; } public: // // 比较日期的运算符重载 // bool operator == (const Date& d) { return _year == d._year && _month == d._month && _day ==d._day; } bool operator != (const Date& d) { return _year != d._year || _month != d._month || _day !=d._day; } bool operator > (const Date& d) { if(_year>d._year ) { return 1; } else if(_year<d._year ) { return 0; } else { if (_month > d._month ) { return 1; } else if (_month < d._month ) { return 0; } else { if(_day > d._day ) { return 1; } else { return 0; } } } return 0; } bool operator >= (const Date& d) { if(_year>d._year ) { return 1; } else if(_year<d._year ) { return 0; } else { if (_month > d._month ) { return 1; } else if (_month < d._month ) { return 0; } else { if(_day >= d._day ) { return 1; } else { return 0; } } } return 0; } bool operator < (const Date& d) { if(_year<d._year ) { return 1; } else if(_year>d._year ) { return 0; } else { if (_month < d._month ) { return 1; } else if (_month > d._month ) { return 0; } else { if(_day < d._day ) { return 1; } else { return 0; } } } return 0; } bool operator <= (const Date& d) { if(_year<d._year ) { return 1; } else if(_year>d._year ) { return 0; } else { if (_month < d._month ) { return 1; } else if (_month > d._month ) { return 0; } else { if(_day <= d._day ) { return 1; } else { return 0; } } } return 0; } // // 计算一个日期加减一个天数以后的日期。 // int GetMonDay(int year,int month) { static int array[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)) { array[2] = 29; } return array[month]; } Date operator+(int day) { Date tmp(*this); tmp._day += day; while(tmp._day > GetMonDay(tmp._year,tmp._month)) { tmp._day -= GetMonDay(tmp._year,tmp._month); if(tmp._month ==12) { ++tmp._year; tmp._month = 1; } else tmp._month ++; } return tmp; } Date operator-(int day) { Date tmp(*this); tmp._day -= day; while(tmp._day < 1) { if(tmp._month ==1) { tmp._month = 12; tmp._year --; tmp._day += 31; } else { tmp._month --; tmp._day += GetMonDay(tmp._year,tmp._month); } } return tmp; } Date& operator-=(int day) { _day -= day; while(_day < 1) { if(_month == 1) { _year--; _month = 12; _day += GetMonDay(_year,_month); } } return *this; } Date& operator+=(int day) { _day += day; while(_day > GetMonDay(_year,_month)) { _day = _day - GetMonDay(_year,_month); if(_month == 12) { _year++; _month = 1; } else { _month++; } } return *this; } const Date& operator++() // 前置++ { _day++; if(_day > GetMonDay(_year,_month)) { if(_month == 12) { _year++; _month = 1; _day = 1; } else { _month++; _day =1; } } return *this; } Date operator++(int) // 后置++ { Date tmp(*this); _day ++; if(_day > GetMonDay(_year,_month)) { if(_month ==12) { _year++; _month = 1; _day =1; } else { _month ++; _day =1; } } return tmp; } const Date& operator--() // 前置-- { _day--; if(_day < 1) { if(_month == 1) { _year--; _month = 12; _day = 31; } else { _month--; _day = GetMonDay(_year,_month); } } return *this; } Date operator--(int) // 后置-- { Date tmp(*this); _day --; if(_day < 1) { if(_month == 1) { _year--; _month = 12; _day = 31; } else { _month--; _day = GetMonDay(_year,_month); } return tmp; } } // // 两个日期相加没有意义 // 计算两个日期相减以后的差的天数 // int operator-(const Date& d) { if(*this > d) { Date d1 = d;//xiao Date d2 =*this;//da } } private: int _year; int _month; int _day; //const int _testConst; //int& _testRef; Time _t; }; void TestDate() { Date d1(2015,1,1); d1.Display (); //Date d2(2015,8,18); //d2.Display(); /*int ret = (d1==d2); cout<<ret<<endl; int ret = (d1!=d2); cout<<ret<<endl; int ret = (d1<=d2); cout<<ret<<endl;*/ d1+=40; d1.Display(); }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/liuxiaoqian_/article/details/47983403