Разработка класса date

В указанном примере реализованы конструкторы и деструкторы, подсчитывающие количество созданных объектов, метод print для вывода даты, инкапсулирующие методы, возвращающие номер дня, месяца, года и метод tomorrow, возвращающий следующую дату за текущей (не учитывающий високосные года).

#include <iostream>
#include <iomanip>

using namespace std;

int date_counter = 0;

class date
{
    int m_day, m_year, m_month;
 public:

    date(int d=1, int m=1, int y=2017)
     {
         date_counter++;
         m_day = d;
         m_month = m;
         m_year = y;
     }

    ~date()
     {
         date_counter--;
     }

     void print()
     {
         cout << setw(2) << setfill('0') << m_day << "."
              << setw(2) << setfill('0') << m_month << "."
              << setw(4) << setfill('0') << m_year << endl;
     }

     int get_day()
     {
         return m_day;
     }

     int get_month()
     {
         return m_month;
     }

     int get_year()
     {
         return m_year;
     }

     date tomorrow()
     {
         date result(*this);
         result.m_day++;
         if (result.m_day == 32 && (result.m_month == 1 || result.m_month == 3 || result.m_month == 5 || result.m_month == 7 || result.m_month == 8 || result.m_month == 10 || result.m_month == 12) ||
             result.m_day == 31 && (result.m_month == 4 || result.m_month == 6 || result.m_month == 9 || result.m_month == 11) ||
             result.m_day == 29 && (result.m_month == 2))
         {
             result.m_day = 1;
             result.m_month++;
         }
         if (result.m_month == 13)
         {
             result.m_month = 1;
             result.m_year++;
         }
         return result;
     }
};

int main()
{
    date today(31, 12, 2017);
    date next = today.tomorrow();
    next.print();
    today.print();
}