Псевдокод, который я получил:
Date& operator++(){
//add 1 to d //tomorrow, unless we were at the end of the month
//if is_date is false
// //need to change to first of next month
// set d to 1
// if m is December
// //need to change to next year too
// set m to January
// increment y
// else
// increment m
return *this;
}
Моя интерпретация:
Date& Date::operator++(){
if (is_date==false){
m=m+1;
d=1;
}
if (m==dec && d==29){
m=jan;
y=y+1;
}
else{
m=m+1;
}
d=d+1;
}
Это выглядит нормально? Я делаю назначение hw, основанное на книге Stroustrups. Просто нужна была проверка
Пусть increment 2010-03-10
:
if (is_date==false){
m=m+1;
d=1;
}
Мы предполагаем, что is_date
истинно, поэтому никаких действий не происходит.
if (m==dec && d==29){
m=jan;
y=y+1;
}
m
не dec и d
не равно 29, поэтому никаких действий не происходит.
else{
m=m+1;
}
Подождите! m
увеличивается.
d=d+1;
Так будет d
.
У нас есть 2010-04-11
сейчас - не то, что мы хотели.
Посмотрите еще раз на псевдокод - первое, что происходит, это добавление дня. Все остальное происходит только тогда, когда is_date является ложным. Но is_date не следует интерпретировать как какое-то статическое значение, но вместо этого должно быть реализовано как проверка, если дата действительна (например, у нас есть 32-й день после инкремента). Только если новая дата недействительна, месяц и/или год увеличиваются.