【问题标题】:Making prefix operator do nothing on certain circumstances使前缀运算符在某些情况下不执行任何操作
【发布时间】:2014-04-04 17:33:21
【问题描述】:

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;
}

如果我尝试像 postfix 运算符那样使用 if 状态,即使日期和时间不是 @0,我的两个运算符都将不起作用。 如果日和小时为 0,如何使前缀运算符不执行任何操作?

【问题讨论】:

  • 你问我们如何写一个if条件?您的代码中已经有一个。
  • 为什么不适用于前缀运算符?
  • 您的逻辑似乎错误,如果天等于 0 并且小时大于 0,它只会减少小时,也许您想要 OR (||)
  • 我在 POSTfix 运算符内部有一个。不是前缀运算符。我是说我怎么能把前缀也归零。

标签: c++


【解决方案1】:

首先,正如 Wimmel 所指出的,您的逻辑似乎不正确。我认为您只想在 both day,hour 为零时禁用 operator--

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

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

总而言之:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    相关资源
    最近更新 更多