визуальный унарный оператор, перегружающий особый случай в переполнении стека

У меня успех полностью перегружен одинарным ++,-- Постфиксный / префиксный оператор и мой код работают нормально, но когда-либо используются (++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;
}

есть решение или причина ???

3

Решение

Я считаю, что лучше всего реализовать постинкремент с точки зрения предварительного инкремента.

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

Другие решения

Преинкремент должен вернуть ABC&не ABC, в общем.

Вы заметите, что это сделает ваш код не скомпилированным. Исправить это относительно просто (не создавайте новый ABC, просто отредактируйте существующее значение, затем верните *this).

7

По вопросам рекламы [email protected]