Der Befehl "Operator": Anfänger braucht Hilfe
-
Hallo
Leider habe ich noch einige Verständnisprobleme in bezug auf
operatorz.b weiß ich nicht den wirklichen unterschied bei den folgenden 3 beispielen
rational rational::operator -() { rational::zaehler = -rational::zaehler; return *this; }rational rational::operator -=(rational r) { r = -r; return *this += r; }rational operator-(rational r1, rational r2) { rational result = r1; return result -= r2; }Kann mir jemand diesen Unterschied erklären?
-
Das sind ind dieser Reihenfolge Negation (x = -r;), zusammengesetzte Zuweisung (r-=r2;) und Subtraktion (x=r1-r2;), wobei der zweite falsch implementiert ist.
(und ich würde die Parameter als "const rational&" übergeben)
-
CStoll schrieb:
Das sind ind dieser Reihenfolge Negation (x = -r;), zusammengesetzte Zuweisung (r-=r2;) und Subtraktion (x=r1-r2;), wobei der zweite falsch implementiert ist.
(und ich würde die Parameter als übergeben)
ah, das is die negation...
das 2. ist dann das eigentliche überladen, und das dritte eine berechnung mit dem überladenen operator???warum mit "const rational&"???
-
jaepen schrieb:
...warum mit "const rational&"???
Um sich das Kopieren zu sparen.
Gruß,
Simon2.
-
jaepen schrieb:
CStoll schrieb:
Das sind ind dieser Reihenfolge Negation (x = -r;), zusammengesetzte Zuweisung (r-=r2;) und Subtraktion (x=r1-r2;), wobei der zweite falsch implementiert ist.
(und ich würde die Parameter als übergeben)
ah, das is die negation...
das 2. ist dann das eigentliche überladen, und das dritte eine berechnung mit dem überladenen operator???Das sind alles dreies überladene Operatoren
Nur der dritte nutzt den zweiten intern für seine Berechnungen. (das ist das übliche Vorgehen, um sicherzustellen, daß -= und - miteinander konform gehen).Aber wie gesagt, dein op-= ist (semantisch) falsch implementiert - die übliche Bedeutung von "x-=y;" ist "ziehe y von x ab und gib dessen neuen Wert zurück" und nicht "negiere y und gib das unveränderte x zurück" (btw, durch die Übergabe per Wert negierst du nicht einmal y, sondern eine lokale Kopie davon).
warum mit "const rational&"???
Wie Simonschon sagte, du mußt nichts kopieren.
-
CStoll schrieb:
Aber wie gesagt, dein op-= ist (semantisch) falsch implementiert - die übliche Bedeutung von "x-=y;" ist "ziehe y von x ab und gib dessen neuen Wert zurück" und nicht "negiere y und gib das unveränderte x zurück" (btw, durch die Übergabe per Wert negierst du nicht einmal y, sondern eine lokale Kopie davon).
wieso unverändertes x? da steht doch *this += y nach der negation...
Letzlich ist es eine sehr eigenwillige Implementation, aber auch sehr interessant