Заставить префиксный оператор ничего не делать при определенных обстоятельствах

0

Перегрузка оператора 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?

  • 1
    Вы спрашиваете нас, как написать условие if? У вас уже есть один внутри вашего кода.
  • 0
    Почему это не относится к префиксному оператору?
Показать ещё 2 комментария
Теги:

1 ответ

1

Во-первых, ваша логика кажется неправильной, как указал Вимм. Я думаю, вы хотите отключить 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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню