#include #include #include using namespace std; class date { int year; int month; int day; static const int length[13]; public: date(int m, int d, int y); date(); // New no-argument constructor void print() const; void next(int n); void next(); int dayOfYear() const; // New function to return day of the year friend int distance(const date& d1, const date& d2); // Friend function }; int main() { try { const date independenceDay {7, 4, 1776}; independenceDay.print(); cout << " is Independence Day.\n"; const date today; // Using the new constructor today.print(); cout << " is today.\n"; const date xmas {12, 25, 2025}; cout << xmas.dayOfYear() << "\n"; // Should print 359 const date d1 {1, 1, 2025}; const date d2 {12, 31, 2025}; cout << "Distance between Jan 1 and Dec 31: " << distance(d1, d2) << " days\n"; const date summer {6, 20, 2025}; // First day of summer const int dist {distance(summer, today)}; cout << "Only " << dist << " days till summer.\n"; } catch (invalid_argument e) { cerr << e.what() << "\n"; return EXIT_FAILURE; } return EXIT_SUCCESS; } const int date::length[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; date::date(int m, int d, int y) { year = y; if (m < 1 || m > 12) throw invalid_argument("bad month"); month = m; if (d < 1 || d > length[month]) throw invalid_argument("bad day of the month"); day = d; } date::date() { time_t t = time(nullptr); tm* p = localtime(&t); year = p->tm_year + 1900; month = p->tm_mon + 1; day = p->tm_mday; } void date::print() const { cout << month << "/" << day << "/" << year; } void date::next(int n) { for (int i = 0; i < n; ++i) { next(); } } void date::next() { if (day < length[month]) { ++day; } else { day = 1; if (month < 12) { ++month; } else { month = 1; ++year; } } } int date::dayOfYear() const { int dayCount = day; for (int i = 1; i < month; ++i) { dayCount += length[i]; } return dayCount; } int distance(const date& d1, const date& d2) { int days1 = d1.dayOfYear() + (d1.year * 365); int days2 = d2.dayOfYear() + (d2.year * 365); return days1 - days2; }