C++ Objekte addieren operator-Funktion?
Hallo,
ich möchte zwei objekte (komplexe zahl) addieren. Dazu habe ich eine Operatorfunktion die auch funktioniert. Zumindest returnt sie ein Objekt mit den Korrekten werten. Nur klappt das zuweisen dieses ergebnisobjekts zum neuen Objekt nicht.
die main, Hier wird das Ergebnis aus c1+c2 nicht c3 zugewiesen, aber warum?
Die operatorfunktion. die zwei prints kann man ignorieren;
Complex.cpp: https://pastebin.com/1G04jjA4
Complex.h: https://pastebin.com/kexxVRJb
main.cpp: https://pastebin.com/kexxVRJb
1 Antwort
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.
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.