Опубликованный код страдает от двух проблем.
Неясно, что должно произойти, когда вы увеличиваете или уменьшаете Weight
объекты.Если его значение увеличится / уменьшится на одну унцию или фунт.
Выражения pounds + 1
, ounces + 15
и т. Д. Ничего не изменяют в объекте.Они вычисляют значение, а полученный результат отбрасывается.
Предполагая, что оператор inrement изменяет значение на одну унцию, вам придется использовать:
void Weight::operator++() {
ounces++;
// If ounces becomes 16, we have to increment pounds by one and set ounces to zero.
if ( ounces == 16 )
{
pounds++;
ounces = 0;
}
// That can also be achieved by using.
// pounds += (ounces / 16);
// ounces = (ounces % 16);
}
Такжеканоническая практика перегрузки оператора ++
- возвращать ссылку на объект.Следовательно, вы должны использовать:
Weight& Weight::operator++() {
ounces++;
// If ounces becomes 16, we have to increment pounds by one and set ounces to zero.
if ( ounces == 16 )
{
pounds++;
ounces = 0;
}
// That can also be achieved by using.
// pounds += (ounces / 16);
// ounces = (ounces % 16);
return *this;
}
Вам нужно будет обновить функцию operator--
аналогичным образом.