Overloading postfix operator doesn't work

我修好程序后,这是昨天的程序。如果我将小时和天数设置为零,则无法使前缀运算符无效。

NumDays NumDays::operator--()
{
    --hour;
    simplify();
    return *this;
}

NumDays NumDays::operator--(int)
{
    NumDays obj1(*this);

    if(day == 0 && hour > 0)
        {   hour--; }

    simplify();
    return obj1;
}


如果我尝试使用后缀运算符之类的if状态,即使日期和时间不是@ 0,我的两个运算符也将无法工作。
如果日期和时间为0,我如何使前缀运算符什么都不做?

最佳答案

首先,正如Wimmel指出的那样,您的逻辑似乎不正确。我认为仅当两个operator--均为零时,您才想禁用day,hour

其次,前缀运算符应返回引用。

第三,您可以让后缀运算符使用前缀1,这样就不会重复代码。

总而言之:

NumDays& NumDays::operator--()
{
    if (day > 0 || hour > 0)
    {
       --hour;
       simplify();
    }
    return *this;
}

NumDays NumDays::operator--(int)
{
    NumDays copy(*this);
    ++(*this);
    return copy;
}

10-08 07:10