Про двойные инкременты
Господа, проясните пожалуйста ситуацию.
Все время думал, что при постфиксоном двойном инкременте будет выдана ошибка, а префиксный сработает, что, собственно, компилятор и пишет
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 = "<
Все время думал, что при постфиксоном двойном инкременте будет выдана ошибка, а префиксный сработает, что, собственно, компилятор и пишет
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.
