C++ Objekte addieren operator-Funktion?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Das Problem liegt in deinem Copy-Konstruktor. Du weist deinen Feldern nicht die Werte der Quelle zu:

Complex::Complex(const Complex& c)
{
  double copyReal = c._real;
  double copyImg = c._img;
}

Korrektur:

Complex::Complex(const Complex& c)
{
  _real = c._real;
  _img = c._img;
}

Der Copy-Konstruktor wird aufgerufen, da es sich bei der Operation um ein copy assignment handelt. Das tmp-Objekt existiert bereits und muss nur noch kopiert werden.

Complex tmp(0, 0);
// ...
return tmp;

Er würde nicht aufgerufen werden, fände eine direkte Initialisierung in deiner Operator-Überladungsmethode statt:

return Complex(_real + c._real, _img + c._img);

Das obige Verhalten kann im Übrigen durch Copy elision unterdrückt werden.


ghkshweu123 
Fragesteller
 21.06.2020, 10:04

Vielen dank für diese ausführliche Antwort!

Wir haben die Anweisung, in der Operator-Funktion nicht das objekt selbst zu überschreiben, sodern eben ein Temp zu erstellen.

0