mikrocontroller.net

Forum: PC-Programmierung Überladen des Gleichheitsoperators


Autor: Fallout-Boy (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: Bri (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Fallout-Boy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: C++ler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> also "return(*this)"?

Eher "return *this;". Man möchte ja nicht den Eindruck erwecken, dass es 
sich bei return um eine Funktion handelt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.