Forum: PC-Programmierung Überladen des Gleichheitsoperators


von Fallout-Boy (Gast)


Angehängte Dateien:

Lesenswert?

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!

von Bri (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

...

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)

von Karl H. (kbuchegg)


Lesenswert?

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)

von Fallout-Boy (Gast)


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

> 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.

von C++ler (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.