date validation

Example by: Ira Oldham, References: Savitch eighth edition, section 10.2; Gaddis seventh edition, not found

We can fix the Date class by validating the dates before storing them.

1  class Date
2  {
3    int day;
4    int month;
5    int year;
6    bool validate(int day_parm, int month_parm, int year_parm);
7  public:
8    bool set_date(int day_parm, int month_parm, int year_parm);
9    int  get_day()   {return day;}
10   int  get_month() {return month;}
11   int  get_year()  {return year;}
12 };
13 int main(void)
14 {
15   Date today;
16   int day;
17   int month;
18   int year;
19   bool valid;
20   cout << "Input date:\nday:   ";
21   cin  >> day;
22   cout << "month: ";
23   cin  >> month;
24   cout << "year:  ";
25   cin  >> year;
26   valid = today.set_date(day, month, year);
27   if (valid)
28   {
29     day   = today.get_day();
30     month = today.get_month();
31     year  = today.get_year();
32     cout << "Date: " << month << '/' << day << '/' << year << endl;
33   }
34   else
35   {
36     cout << "Not a valid date\n";
37   }
38   return 0;
39 }
40 bool Date::set_date(int day_parm, int month_parm, int year_parm)
41 {
42   bool valid = validate(day_parm, month_parm, year_parm);
43   if (valid)
44   {
45     day   = day_parm;
46     month = month_parm;
47     year  = year_parm;
48   }
49   return valid;
50 }
51   bool Date::validate(int day_parm, int month_parm, int year_parm)
52   {
53   const int DAY_MIN = 1;
54   const int DAY_MAX = 31;
55   const int MONTH_MIN = 1;
56   const int MONTH_MAX = 12;
57   return day_parm >= DAY_MIN &&
58          day_parm <= DAY_MAX &&
59          month_parm >= MONTH_MIN &&
60          month_parm <= MONTH_MAX ;
61   }
Input date:
day:   32
month: 13
year:  1234
Not a valid date
Input date:
day:   31
month: 12
year:  1234
Date: 12/31/1234

There are two principal kinds of methods: