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