Eine Operation inc für Daten könnte z.B. das Objekt auf das
Datum des jeweils folgenden Tags setzen:
- void date::inc()
{
if (++day>=29)
if ( day > (month==2) ? (is_leapyear(year)?29:28) : mlen[month-1] )
{
day=1;
if (++month==13)
{
month=1;
++year;
}
}
}
An mehreren Stellen ergeben sich Situationen, in denen das Tripel
(day, month, year) nicht für ein gültiges
Datum steht, z.B. wenn month nach dem ++ den Wert
13 hat.
Am Ende der Operation hat das Objekt aber wieder einen sinnvollen Wert.
Solange das Objekt in dieser Weise undefiniert ist, sollten keine
Elementfunktionen für dieses Objekt aufgerufen werden, die nicht explizit
dazu gedacht sind, es zu "reparieren".