#include #include #include "leapdate.h" using namespace std; leapdate::leapdate(int initial_month, int initial_day, int initial_year) : date {initial_month, initial_day, initial_year} { if (initial_day > length()) { cerr << "bad day " << initial_month << "/" << initial_day << "/" << initial_year << "\n"; exit(EXIT_FAILURE); } } int leapdate::length() const { const int y {get_year()}; bool is_leap {false}; //will be true if y is a leap year if (y % 400 == 0) { //2000 and 2400 are leap years is_leap = true; } else if (y % 100 == 0) { //1700, 1800, 1900, and 2100 aren't leapyears is_leap = false; } else if (y % 4 == 0) { is_leap = true; } else { is_leap = false; } if (!is_leap && get_month() == 2) { //the one case in which we're not satisfied with date::length() return 28; } else { return date::length(); } }