Zuweisung für Objekte



  • Hi,
    ich hab mal gelesen, dass die Zuweisung (mit 🙂 fü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.


Anmelden zum Antworten