Kopierkonstruktor



  • Hallo ihr lieben,
    ich habe mal eine Frage zu Konstruktoren in C++. Ich studiere Informatik und hänge gerade in C++, ich bin zwar ganz gut dabei und weiß was ein Konstruktot ist und alles, aber ich stoße immer wieder auf zwei Begriffe , die mir weder in der Vorlesung noch in den entsprechenden Lehrbücher erklärt wurden. Diese Begriffe werden einfach kommentarlos benutzt und ich weiss nicht was es zu bedeuten hat.
    Kann mir bitte jemand erklären was ein Standardkonstruktor und was ein Kopierkonstruktor sein soll? Soll ein Standardkonstruktor ein Konstruktor sein, der mit Standardwerten vorbelegt ist, z.B. meineKlasse::meineKlasse(int a=1, int b=2){} anstelle von meineKlasse::meineKlasse(int a, int b){} ????
    Und ist ein Kopierkonstruktor ein Konstruktor, der bei Erzeugung des Objekts gleich eine Kopie davon anlegt(das würde doch endlos laufen)???

    Tausend Dank für eure Hinweise.

    MfG

    DanDanR



  • Beidesmal nein.

    Ein Standardkonstruktor ist ein Konstruktor ohne Argumente, also
    meineklasse::meineklasse()

    ein Kopierkonstruktor ist ein Konstruktor der dazu dient, das soeben konstruierte Objekt als Kopie eines anderen Objektes (gleichen Typs) zu erzeugen. Konsequenterweise braucht er deshalb eine Referenz auf dieses andere Objekt als Parameter und keine sonstigen Parameter:

    meineklasse::meineklasse(meineklasse const& original) bzw.
    meineklasse::meineklasse(meineklasse& original)

    Sollte aber auch im C++-Buch deiner Wahl zu finden sein.


  • Mod

    Ein Standardkonstruktor ist ein Konstruktor ohne Parameter oder dessen Parameter allesamt Defaultwerte haben.

    Ein Kopierkonstruktor ist ein Konstruktor mit einer Referenz auf den Objekttyp selbst (häufig noch const qualifiziert, theoretisch auch volatile) als Parameter. Er darf auch mehr Parameter haben, aber diese müssen dann Defaultwerte haben.

    Was diese Konstruktoren genau tun bleibt dem Programmierer überlassen, es wird aber meistens erwartet, dass der Standardkonstruktor einfach genau die Standardkonstruktoren der Member aufruft und der Kopierkonstruktor die jeweiligen Kopierkonstruktoren mit den Membern des übergebenen Parameters als Argument.

    Diese beiden Konstruktoren (und der Zuweisungsoperator und der Destruktor) werden vom Compiler bei Bedarf auch automatisch angelegt, sofern man keine eigene Deklaration vornimmt. Das Verhalten ist dann das im vorherigen Absatz beschriebene (und der automatische Destruktor ruft den Destruktor aller Member auf und der automatische Zuweisungsoperator ruft den Zuweisungsoperator aller Member auf).


Anmelden zum Antworten