Hallo zusammen, vielleicht kann mir einer von euch bei diesem Programm zur Berechung von komplexen Zahlen helfen. Das überladen des Gleichheitsoperators im beigefügten Programm funtioniert nicht. KomplexeZahl KomplexeZahl::operator = (const KomplexeZahl &z) { r = z.r; i = z.i; }; Wo ist mein Denkfehler? Danke im Voraus!
1. das ist der Zuweisungsoperator 2. der Rückgabewert sollte per Referenz zurückgegeben werden 3. es fehlt das return *this; 4. WAS funktioniert nicht?
... Wohingegen, die Operatoren für +, -, * und / ihr Argument per const Referenz übernehmen sollten. KomplexeZahl KomplexeZahl::operator + (const KomplexeZahl& z) { //Hilfsvariable erg ist eine komplexe Zahl //erg ist hier das Ergebnis der Addition KomplexeZahl erg(r + z.r, i + z.i); return erg; } (Das ; hinter den Funktionen ist unnötig)
Und wenn du schon die Funktion so implementierst KomplexeZahl KomplexeZahl::operator = (const KomplexeZahl &z) dann solltest du das in der Klassendekleration auch tun: class KomplexeZahl { ... KomplexeZahl operator = (KomplexeZahl); }; Vergleich doch mal die beiden. In der Implementierung behauptest du, dass operator= eine const Referenz akzeptiert, in der Klassendeklaration behauptest du, dass operator= ein Objekt nimmt. Was denn nun? int main() { ... return EXIT_SUCCESS; return 0; }; Ein return reicht völlig, der andere wird sowieso nie erreicht. (Und der ; ist überflüssig)
Ok danke für die Auskunft. KomplexeZahl KomplexeZahl::operator = (const KomplexeZahl &z) { r = z.r; i = z.i; } Ich muss das Ergebnis der Zuweisung, also per Referenz an die aufrufende Programmstelle zurückgeben, also "return(*this)"? Desweiteren werden die Funktionen in der Klassendeklaration nicht als Objekte deklariert. Dann müsste das Programm eigentlich laufen.
> Wo ist mein Denkfehler? Erstmal darin zu glauben, jeder könne sich was unter "funktioniert nicht" vorstellen. > Desweiteren werden die Funktionen in der Klassendeklaration nicht als > Objekte deklariert. Ich weiß nicht genau, was das bedeuten soll. Jedenfalls müssen die Funktionen mit exakt denselben Parameter- und Rückgabetypen deklariert sein, die auch später bei der Definition angegeben sind.
> also "return(*this)"?
Eher "return *this;". Man möchte ja nicht den Eindruck erwecken, dass es
sich bei return um eine Funktion handelt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.