class CDate {
private:
unsigned day_, month_, year_;
public:
CDate(unsigned day, unsigned month, unsigned year);
CDate(unsigned long timestamp = 0);
CDate(const CDate &c);
unsigned GetDay() const;
unsigned GetMonth() const;
unsigned GetYear() const;
void SetDay(unsigned toSet);
void SetMonth(unsigned toSet);
void SetYear(unsigned toSet);
string ToString(bool readable = false) const;
void ParseString(string toParse);
bool IsValid() const;
friend const CDate& operator++ (CDate& t);
friend const CDate& operator++ (CDate& t, int);
friend const CDate& operator-- (CDate& t);
friend const CDate& operator-- (CDate& t, int);
friend const CDate operator+ (const CDate& left, unsigned right);
friend const CDate operator- (const CDate& left, unsigned right);
friend const unsigned operator- (const CDate& left, const CDate& right);
friend const CDate& operator+= (CDate& left, const unsigned right);
friend const CDate& operator-= (CDate& left, const unsigned right);
friend ostream& operator<< (ostream& os, const CDate& right);
friend istream& operator>> (istream& is, CDate& right);
friend const bool operator== (const CDate& left, const CDate& right);
friend const bool operator!= (const CDate& left, const CDate& right);
friend const bool operator< (const CDate& left, const CDate& right);
friend const bool operator> (const CDate& left, const CDate& right);
friend const bool operator<= (const CDate& left, const CDate& right);
friend const bool operator>= (const CDate& left, const CDate& right);
};