#include #include #include "leapdate.h" using namespace std; leapdate::leapdate(int init_month, int init_day, int init_year) : date {init_month, init_day, init_year} { if (init_day > length()) { cerr << "bad day " << init_month << "/" << init_day << "/" << init_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(); } }