#include //for the object cout #include #include //for class system_clock #include //for the function localtime and structure tm #include "date.h" //The implementation file always includes the header file. using namespace std; const int date::length[] { //definition of static data member 0, //dummy, so that January will have subscript 1 31, //January 28, //February. We'll do leap years later in the course. 31, //March 30, //April 31, //May 30, //June 31, //July 31, //August 30, //September 31, //October 30, //November 31 //December }; //The constructor installs 3 valid values into a newborn date object, //or it outputs an error message and terminates the program. date::date(int init_month, int init_day, int init_year) { year = init_year; if (init_month < 1 || init_month > 12) { cerr << "Bad month " << init_month << "\n"; exit(EXIT_FAILURE); } month = init_month; if (init_day < 1 || init_day > length[month]) { cerr << "Bad month " << init_month << " and day " << init_day << "\n"; exit(EXIT_FAILURE); } day = init_day; } date::date() { const auto now {chrono::system_clock::now()}; const time_t t {chrono::system_clock::to_time_t(now)}; const tm *const p {localtime(&t)}; month = p->tm_mon + 1; day = p->tm_mday; year = p->tm_year + 1900; } int date::monthsInYear() { return size(length) - 1; //number of months in a year } void date::print() const //This member function can't change the date object. { cout << month << "/" << day << "/" << year; } void date::next(int n) //This member function can change the date object. { for (int i {0}; i < n; ++i) { next(); //Call the other next function, the one with no argument } } void date::next() //Move this date object one day into the future. { if (day < length[month]) { ++day; } else { day = 1; //Advance into the next month. if (month < 12) { ++month; } else { month = 1; //Advance into the next year. ++year; } } } void date::prev(int k) //This member function can change the date object. { for (int j {0}; j < k; ++j) { prev(); //Call the other next function, the one with no argument } } void date::prev() //Move this date object one day into the past. { if (day > 1) { --day; } else { if (month > 1) { //Move back to previous month. --month; } else { month = 12; //Move back to previous year. --year; } day = length[month]; //Now that in correct new month, assign day to length of month because it is the last day of the new month. } }