//: C02:Date.h // From "Thinking in C++, Volume 2", by Bruce Eckel & Chuck Allison. // (c) 1995-2004 MindView, Inc. All Rights Reserved. // See source code use permissions stated in the file 'License.txt', // distributed with the code package available at www.MindView.net. #ifndef DATE_H #define DATE_H #include #include #include class Date { int year, month, day; int compare(const Date&) const; static int daysInPrevMonth(int year, int mon); public: // A class for date calculations struct Duration { int years, months, days; Duration(int y, int m, int d) : years(y), months(m) ,days(d) {} }; // An exception class struct DateError : public std::logic_error { DateError(const std::string& msg = "") : std::logic_error(msg) {} }; Date(); Date(int, int, int) throw(DateError); Date(const std::string&) throw(DateError); int getYear() const; int getMonth() const; int getDay() const; std::string toString() const; friend Duration duration(const Date&, const Date&); friend bool operator<(const Date&, const Date&); friend bool operator<=(const Date&, const Date&); friend bool operator>(const Date&, const Date&); friend bool operator>=(const Date&, const Date&); friend bool operator==(const Date&, const Date&); friend bool operator!=(const Date&, const Date&); friend std::ostream& operator<<(std::ostream&, const Date&); friend std::istream& operator>>(std::istream&, Date&); }; #endif // DATE_H ///:~