Перегрузка оператора postfix не работает
Вчера была моя программа после того, как я ее исправил. У меня возникли проблемы с тем, чтобы префикс не выполнял ничего, если мои часы и дни установлены на ноль.
NumDays NumDays::operator--()
{
--hour;
simplify();
return *this;
}
NumDays NumDays::operator--(int)
{
NumDays obj1(*this);
if(day == 0 && hour > 0)
{ hour--; }
simplify();
return obj1;
}
Если я попытаюсь использовать состояние if, такое как оператор postfix, оба моих оператора не будут работать, даже если день и часы не равны 0. Как заставить оператор префикса ничего не делать, если день и час равны 0?
Во-первых, ваша логика кажется неправильной, как указал Вимм. Я думаю, вы хотите отключить operator--
только тогда, когда и day,hour
равны нулю.
Во-вторых, оператор префикса должен вернуть ссылку.
В-третьих, у вас может быть постфиксный оператор, который использует префикс, поэтому вы не дублируете код.
В общем:
NumDays& NumDays::operator--()
{
if (day > 0 || hour > 0)
{
--hour;
simplify();
}
return *this;
}
NumDays NumDays::operator--(int)
{
NumDays copy(*this);
++(*this);
return copy;
}