//This file is date.h. It is the header file for class date. #ifndef DATEH #define DATEH #include #include using namespace std; class date { int year; int month; //1 to 12 inclusive int day; //1 to date_length[month] inclusive public: enum month_t { january = 1, february, march, april, may, june, july, august, september, october, november, december }; date(int initial_month, int initial_day, int initial_year); date(int initial_day); date(); void next(int count = 1); //Go count days forward. date& operator+=(int count) {next(count); return *this;} date& operator-=(int count) {next(count); return *this;} date& operator++() {return *this += 1;} const date operator++(int) {const date d = *this; ++*this; return d;} void print() const {cout << month << "/" << day << "/" << year;} int julian() const; friend bool equals(const date& d1, const date& d2) { return d1.day == d2.day && d1.month == d2.month && d1.year == d2.year; } friend int operator-(const date& d1, const date& d2) { return 365 * (d1.year - d2.year) + d1.julian() - d2.julian(); } friend bool operator==(const date& d1, const date& d2) { return d1.year == d2.year && d1.month == d2.month && d1.day == d2.day; } friend bool operator<(const date& d1, const date& d2) { return d1.year < d2.year || d1.year == d2.year && (d1.month < d2.month || d1.month == d2.month && d1.day < d2.day); } friend bool operator<=(const date& d1, const date& d2) { return d1.year < d2.year || d1.year == d2.year && (d1.month < d2.month || d1.month == d2.month && d1.day <= d2.day); } friend int dist(const date& d1, const date& d2) { return 365 * (d1.year - d2.year) + d1.julian() - d2.julian(); } friend const date& min(const date& d1, const date& d2) { return dist(d1, d2) > 0 ? d2 : d1; } friend date midpoint(const date& d1, const date& d2) { div_t di = div(dist(d1, d2), 2); if (di.rem < 0) { --di.quot; } date d = d2; d.next(di.quot); return d; } friend ostream& operator<<(ostream& ost, const date& d); friend istream& operator>>(istream& ist, date& d); //operator int() const {return julian();} operator int() const {return 365 * year + julian();} }; inline bool operator>(const date& d1, const date& d2) {return !(d1 <= d2);} inline const date operator+(date d, int count) {return d += count;} inline const date operator-(date d, int count) {return d -= count;} #endif