#ifndef DATE_H #define DATE_H #include using std::ostream; using std::istream; class Date { public: friend ostream& operator<<(ostream&,const Date&); friend istream& operator>>(istream&,Date&); bool operator==(const Date&) const; Date(); Date(int m); Date(int m, int d); Date(int m, int d, int y); void setMonth(int m); void setDay(int d); void setYear(int y); int getMonth(); int getDay(); int getYear(); virtual ~Date(); private: int month; int day; int year; };//end date class Date::Date() { month = 1; day = 1; year = 2000; }//end Date constructor Date::Date(int m) { setMonth(m); day = 1; year = 2000; }//end Date constructor Date::Date(int m, int d) { setMonth(m); setDay(d); year = 2000; } Date::Date(int m, int d, int y) { setMonth(m); setDay(d); setYear(y); }//end Date constructor void Date::setMonth(int m) { if (m >0 && m < 13) month = m; else { std::cerr << "invalid month " << m << std::endl; month = 1; } }//end of setMonth void Date::setDay(int d) { switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: if (d > 0 && d < 32) day = d; else { std::cerr << "invalid day " << d << std::endl; day = 1; } break; case 2: //ignore leap years if (d > 0 && d < 29) day = d; else { std::cerr << "invalid day " << d << std::endl; day = 1; } break; case 4: case 6: case 9: case 11: if (d > 0 && d < 31) day = d; else { std::cerr << "invalid day " << d << std::endl; day = 1; } break; default: day = 1; };//end switch }//end setDay function void Date::setYear(int y) { if( y > 0) year = y; else { std::cerr << "invalid year " << y << std::endl; year = 2000;//default value } }//end setYear int Date::getMonth() { return month; }//end getMonth int Date::getDay() { return day; }//end getDay int Date::getYear() { return year; }//end getYear Date::~Date() { }//empty, nothing to do bool Date::operator==(const Date &otherDate) const { return (otherDate.month == month && otherDate.day == day && otherDate.year == year); }//end == operator ostream& operator<<(ostream &out, const Date &d) { out << setfill('0') << setw(2) << d.month << "/" << setw(2) << d.day << "/" << setw(4) << d.year; out << setfill(' '); return out; }//end overloaded stream insertion operator istream& operator>>(istream &in, Date &d) { int num; in >> num; d.setMonth(num); in.ignore(1);//ignore '/' in >> num; d.setDay(num); in.ignore(1);//ignore '/' in >> num; d.setYear(num); return in; }//end overloaded stream extraction operator #endif