// Date.cpp #include using namespace std; #include "Date.h" Date::Date() // default constructor { month = 1; // default date is 1/1/2000 day = 1; year = 2000; } Date::Date( int m, int d, int y ) { month = m; day = d; year = y; } void Date::setDay( int d ) { day = d; } void Date::setMonth( int m ) { month = m; } void Date::setYear( int y ) { year = y; } void Date::increment() { if ( !isLastDayInMonth() ) { day++; } else { day = 1; if ( month == 12 ) // December { month = 1; year++; } else { month++; } } } void Date::decrement() { if ( day > 1 ) { day--; } else // day == 1 { if ( month > 1 ) { month--; } else // month == 1 { month = 12; year--; } day = lastDayInMonth(); } } int Date::getDay() const { return day; } int Date::getMonth() const { return month; } int Date::getYear() const { return year; } int do_something( const Date& d2 ) { // cout << d2.day << endl; return 0; } int another_function() { cout << "Hello" << endl; return 0; } bool Date::isEqual( const Date& date2 ) const { if ( day == date2.day && month == date2.month && year == date2.year ) { return true; } else { return false; } } // Also write an isLessThan() function... const int DaysInMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; bool Date::isLeapYear() const { return year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ); } bool Date::isLastDayInMonth() const { return ( day == lastDayInMonth() ); } int Date::lastDayInMonth() const { if ( month == 2 && isLeapYear() ) { return 29; } else { return DaysInMonth[ month - 1 ]; } } void Date::print() const { cout << month << '/' << day << '/' << year; } bool sameDayAndMonth( const Date& date1, const Date& date2 ) { if ( date1.getDay() == date2.getDay() && date1.getMonth() == date2.getMonth() ) { return true; } else { return false; } } bool isLessThan( const Date& date1, const Date& date2 ) { if ( date1.getYear() < date2.getYear() ) { return true; } else if ( date1.getYear() > date2.getYear() ) { return false; } else /* years are equal */ if ( date1.getMonth() < date2.getMonth() ) { return true; } else if ( date1.getMonth() > date2.getMonth() ) { return false; } else /* months are equal */ if ( date1.getDay() < date2.getDay() ) { return true; } else { return false; } } bool operator< ( const Date& date1, const Date& date2 ) { if ( date1.getYear() < date2.getYear() ) { return true; } else if ( date1.getYear() > date2.getYear() ) { return false; } else /* years are equal */ if ( date1.getMonth() < date2.getMonth() ) { return true; } else if ( date1.getMonth() > date2.getMonth() ) { return false; } else /* months are equal */ if ( date1.getDay() < date2.getDay() ) { return true; } else { return false; } } ostream& operator<< ( ostream& os, const Date& d ) { d.print(); return os; } Date Date::operator+ ( int days ) const // e.g. Date d2 = d1 + 40; { // Date d2 = d1.operator+(40); Date d( month, day, year ); for ( int i = 0 ; i < days ; i++ ) { d.increment(); } return d; } // Date d3 = d1 + 50 + 60; // Date d3 = d1.operator+(50) //Date operator+ ( const Date& d1, int days ) //{ // Date d2 = operator+(d1,40); // ... //} Date operator- ( const Date& d1, int days ) { Date d( d1.getMonth(), d1.getDay(), d1.getYear() ); for ( int i = 0 ; i < days ; i++ ) { d.decrement(); } return d; } // postfix // void operator++ ( int dummy ); Date Date::operator++ ( int dummy ) { Date d( month, day, year ); cout << "(doing postfix ++ on Date)\n"; increment(); return d; } // prefix Date& Date::operator++ () { cout << "(doing prefix ++ on Date)\n"; increment(); return *this; // this is a pointer (e.g. Date * this;) } bool operator== ( const Date& d1, const Date& d2 ) { return d1.isEqual( d2 ); }