Überladener Zuweisungsoperator
-
Hallo,
sei a ein Objekt der Klasse X. Nun hat die Klasse X einen allgemeinen Konstruktor, einen überladenen Zuweisungsoperator und natürlich den Destruktor. Ich hab in alle drei ein cout geschrieben um zu sehen ob und wenn ja in welcher Reihenfolge sie aufgerufen werden.
1.) Allgemeiner Konstruktor
2.) Zuweisungsoperator
3.) DestruktorKönnt ihr mir erklären warum das so ist.
a = 20;
-
Malcolm_X schrieb:
Könnt ihr mir erklären warum das so ist.
Warum was so ist ????????????
Wäre nicht schlecht wenn du uns mal den überladenen Zuweisungsoperator zeigen würdest
Denn da liegt ja dein Fehler

-
Also hier mein Zuweisungsoperator:
X& operator=(const X& x) { data = x.data; cout << "Zuweisungsoperator " << data << '\n'; return *this; }
-
Als erstes dürfte die 20 in ein temporäres X mit dem konstruktor konvertiert werden, dann wird der zuweisungsoperator aufgerufen und das temporäre X von der 20 wird wieder zerstört.
-
mmm soweit klar. Aber warum wird die 20 in ein temponäres Objekt vom Typ X konvertiert. Ich meine woher weiss der Compiler das er für die 20 den allgemeinen Konstruktor aufrufen soll?
hier mal der Konstruktor
X(int d = -1) : data(d) { cout << "Allgemeiner Konstruktor " << '\n'; }
-
der op= ist nur für X auf der rechten Seite definiert. Wenn jetz aber auf der rechten seite ein int steht wird, wenn ein solcher existiert und er nicht als explicit gekennzeichnet ist, ein konstruktor mit Parameter int aufgerufen, um den int in ein X zu konvertieren.
-
weil dein konstruktor offensichtlich nunmal fuer ints (wie zb. 20) gedacht ist.