signature вашего оператора перегрузки должны быть:
circle& operator++(); // return by reference and this is prefix.
Но вы используете суффикса, так и должно быть:
circle operator++ (int); // int is unused
Изменение подписи является недостаточно, поскольку вы реализуете префиксную логику, напрямую изменяя значение без сохранения начального значения. Поэтому, если вы используете оператор postfix с вашей реализацией в комбинированном выражении, например (c++).output()
, он не будет уважать ожидаемую семантику.
Здесь implemetnation обоих версии:
circle& operator++() { // prefix
Area = Area * 2.0; // you can change directly the value
cout << "prefix"<<endl;
return *this; // and return the object which contains new value
}
circle operator++ (int) { // postfix
circle c(*this); // you must save current state
Area = Area * 2.0; // then you update the object
cout << "postfix"<<endl;
return c; // then you have to return the value before the operation
}
а вот online demo, чтобы показать разницу между обоими.
Вы не называете постфиксную версию 'c1 ++'? – EdChum
Также вам необходимо проверить свои [подписи] (http://en.cppreference.com/w/cpp/language/operator_incdec), поскольку ваша версия не соответствует – EdChum
. Подпись для post increment 'c1 ++' требует, чтобы вы реализовали ' circle & circle :: operator ++ (int) '. Ваша текущая реализация 'operator ++()' будет работать для pre increment '++ c1' – Vishal