我成功完全重载了一元++,--
后缀/前缀运算符,我的代码工作正常,但是当使用(++obj)++
语句时,它会返回意外结果
这是代码
class ABC
{
public:
ABC(int k)
{
i = k;
}
ABC operator++(int )
{
return ABC(i++);
}
ABC operator++()
{
return ABC(++i);
}
int getInt()
{
return i;
}
private:
int i;
};
int main()
{
ABC obj(5);
cout<< obj.getInt() <<endl; //this will print 5
obj++;
cout<< obj.getInt() <<endl; //this will print 6 - success
++obj;
cout<< obj.getInt() <<endl; //this will print 7 - success
cout<< (++obj)++.getInt() <<endl; //this will print 8 - success
cout<< obj.getInt() <<endl; //this will print 8 - fail (should print 9)
return 1;
}
有任何解决方案或理由???
答案 0 :(得分:7)
一般情况下,预先增量应该返回ABC&
,而不是ABC
。
您将注意到这将使您的代码无法编译。修复相对容易(不要创建新的ABC
,只需编辑现有的值,然后返回*this
)。
答案 1 :(得分:1)
我发现最好在预增量方面实现后增量。
ABC operator++(int )
{
ABC result(*this);
++*this; // thus post-increment has identical side effects to post-increment
return result; // but return value from *before* increment
}
ABC& operator++()
{
++i; // Or whatever pre-increment should do in your class
return *this;
}