Image

Imageskizzzle wrote in Imageru_cpp

Category:

Про двойные инкременты

Господа, проясните пожалуйста ситуацию.

Все время думал, что при постфиксоном двойном инкременте будет выдана ошибка, а префиксный сработает, что, собственно, компилятор и пишет

int i;
++ ++i;//работает
i++ ++;//ошибка

Далее хочу перегрузить префиксный и постфиксный операторы в классе и проделать ту же операцию. Но при проверке оказывается, что срабатывает и префиксный, и постфиксный операторы. Объясните, пожалуйста, почему срабатывает постфиксный?

class Rational
{
int p,q;
public:
Rational(int a = 0, int b = 0){p = a; q = b;}
~Rational(){}
Rational& operator++();
Rational operator++(int noused);

void out(){cout<<"p = "<

<<" q = "<<

};

Rational& Rational::operator++()
{
++p;
++q;
return *this;
}

Rational Rational::operator++(int noused)
{
Rational temp = *this;
++p;
++q;
return temp;
}

int main ()
{
Rational z(1,2), x(1,2);
++++z;
z.out();//выводится 3,4
x++++;
x.out();//выводится 2,3
return 0;
}

UPD:Спасибо, ответ в комментариях. Нужно изменить возвращаемое значение в постфиксном инкременте с Rational на const Rational.