Zuweisung für Objekte
-
Hi,
ich hab mal gelesen, dass die Zuweisung (mitfür jede Klasse schon standardmäßig definiert ist. Also, dass ich einem existierenden Objekt einer Klasse mit = ein Objekt derselben Klasse zuweisen kann...
Funktioniert aber bei mir nich:#include "mitglied.h" #include <iostream> using namespace std; int main() { Mitglied m1(12345, "Max", "Mustermann", "Dr. med.", "+12335357", "+4914353450", "Musterstraße", "7a", "12345", "Musterstadt", "Germany", 28, 3, 1957); Mitglied m2; m1.print(); cin.get(); m2.print(); cin.get(); Mitglied m3 = m1; //funktioniert (Kopier-Konstruktor) m3.print(); cin.get(); m2 = m3; //funktioniert nicht, warum?) m2.print(); return 0; }
Die Zeile m2=m3; funktioniert nicht, das is doch ne zuweisung und die is doch für jede Klasse schon standardmäßig definiert...
Oder hab ich da was falsch verstanden?
Gruß
wolb
-
Wie ist denn deine Klasse definiert? Unter bestimmten Umständen (z.B. konstante Elemente oder Referenzen) lässt sich der Standard-Zuweisungsoperator nicht mehr einsetzen.
-
Hallo
Du kannst doch einfach = überladen.
chrische
-
Was heisst "funktioniert nicht", gehts auch etwas genauer.
Wenn du keinen eigenen Copy-Konstruktor definierst, dann wird automatisch
einer gerneriert. Ob dieser automatische Copy-Konstruktor so funktioniert
wie du das gerne möchtest hängt jedoch vom Innenleben der Klasse selbst ab.
-
ah, ok,
habn konstantes objekt drinne...
liegt dann wahrscheinlich dadran...
ich weiß, dass ich = auch überladen könnte, hab mich nur gewundert, warum das net funktioniert hat, also der FEhler aufgetreten ist, dass = nicht überladen ist für die Klasse, wo doch eigentlich automatisch die Zuweisung definiert ist.
thx
wolb
-
wolb schrieb:
habn konstantes objekt drinne...
Und da haben wir das Problem: der Default-Zuweisungsoperator ruft einfach die Zuweisung aller Member auf - allerdings kann einem konstanten Objekt nichts zugewiesen werden, weshalb der Operator hier scheitert.
Damit wirst du wohl nicht um einen selbstgeschriebenen Zuweisungsoperator drumrumkommen.