Die signature Ihrer Überlastung Operator sein sollte:
circle& operator++(); // return by reference and this is prefix.
Aber Sie postfix verwenden, soll es so sein sollte:
circle operator++ (int); // int is unused
Ändern der Signatur nicht genug, weil Sie eine Präfixlogik implementieren und den Wert direkt ändern, ohne den Anfangswert zu speichern. Wenn Sie also den Postfix-Operator mit Ihrer Implementierung in einem kombinierten Ausdruck wie (c++).output()
verwenden würden, würde dies die erwartete Semantik nicht berücksichtigen.
Hier ist die implemetnation beide Version:
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
}
Und hier ein online demo Unterschied zwischen den beide zu zeigen.
Rufen Sie nicht Postfix-Version 'C1 ++'? – EdChum
Sie müssen auch Ihre [Signaturen] (http://en.cppreference.com/w/cpp/language/operator_incdec) überprüfen, da Ihre Version nicht übereinstimmt. – EdChum
Die Signatur für post increment 'c1 ++' erfordert die Implementierung von ' circle & circle :: operator ++ (int) '. Ihre aktuelle Implementierung von 'operator ++()' wird für Pre-Inkrement '++ c1' funktionieren. – Vishal