Когда ++
идет после имени переменной, оно называется оператором приращения 'postfix'. Это возвращает копию переменной, а затем увеличивает саму переменную. Это не обязательно, как все перегрузки оператора приращения постфикса должны работать, но это общепринятая:
int i = 5;
int j = i++; //here j is 5
//i is now 6
Чтобы получить поведение, к которому вы стремитесь, вы должны использовать оператор приращения 'prefix', где ++
предшествует перед именем переменной. Это увеличивает переменную, а затем возвращает ссылку на нее:
int i = 5;
int j = ++i; //here j is 6, as is i
При перегрузке операторов перегрузка оператора postfix требует фиктивного аргумента, а перегрузка префиксного оператора - нет. Из вашего примера:
Date& operator++(); //prefix increment operator
Date operator++(int) //postfix increment operator
Поэтому, чтобы увеличить переменную даты и вернуть ссылку на нее, используйте:
std::cout << "tomorrow is " << ++today << std::endl; //prefix operator