Ableitungen



  • Hi,

    ich ab da ne Verständinsfrage mit Ableitungen...

    Wenn ich eine Abgeleitete Klasse habe un von der ein Objekt erzeuge ... werden dann Werte Kopiert?? also benötige ich einen Kopierkonstruktor und Zuweisungsoperator???

    das sist mir irgendwie nicht so klar 😕

    mfG
    AlP



  • Hallo,

    es gibt einen Default-CopyConstruktor, wenn du keinen eigenen überlädst.
    Der macht dann nix anderes, als eine billige 1:1 Kopie des Speicherinhalts der Klasse.



  • also nur das ich das jetzt richt verstehe ... wenn cih ein Objekt von einer angeleiteten Klasse Erzeuge wid sozusagen gleichzeitig ein Objekt der Basisklasse mit erstellt und kopiert???



  • Es wird nicht extra ein Basisklassenobjekt erstellt und kopiert, vielmehr sind die Member der Basisklasse nun Teil der abgeleiteten Klasse.
    Und um die einzurichten, wird ja erst der Basisklassenconstruktor augerufen, bevor der Konstruktor der abgeleiteten Klasse zum Zuge kommt.



  • SeppSchrot hat es schon gesagt. Wenn Du ein Objekt einer abgeleiteten Klasse erstellst, wird zunächst der Konstruktor der Basis-Klasse durchlaufen. Kopiert wird nichts, solange Du keine Kopier-Aktionen hinzufügst.
    Schau Dir folgendes Code-Segment an; ich denke, dann wird's klarer

    #include <iostream>
    using namespace std;
    
    class Member1 
    { 
    public: 
        Member1() { cout << "Member1" << endl; } 
    };
    class Base
    {
    public:
        Base() { cout << "Base Konstruktor" << endl; }
    private:
        Member1 m_member1;
    };
    
    class Member2 
    { 
    public: 
        Member2() { cout << "Member2" << endl; } 
    };
    class Abgeleitet : public Base
    {
    public:
        Abgeleitet() { cout << "Abgeleitet Konstruktor" << endl; }
    private:
        Member2 m_member2;
    };
    
    int main()
    {
        Abgeleitet a;
        return 0;
    }
    

    Als Ausgabe erhälst Du:

    Member1
    Base Konstruktor
    Member2
    Abgeleitet Konstruktor
    

    Gruß
    Werner



  • SeppSchrot schrieb:

    Hallo,

    es gibt einen Default-CopyConstruktor, wenn du keinen eigenen überlädst.
    Der macht dann nix anderes, als eine billige 1:1 Kopie des Speicherinhalts der Klasse.

    Der ruft allerdings auch die CopyConstructoren der enhaltenen Elemente auf.

    mfg.



  • okay ... so hatte ich es mir auch gedacht ...

    Aber ... ich rufe lege über die abgeleitete Klasse eine char* an ... (Speicherplatz wird auch genügend allokiert)

    nur zu Schluss wenn den speicher wieder freigeben will bricht er während des Prgs ab (ich gebe ihn mit delete [] var frei).

    Deswegen hatte ich gedacht das durch die Ableitung vllt ein zweites Objekt erzeugt wird und dann zu Schluss die Zeiger ohne zuweisung wären.

    mfG AlP



  • Das ist typisch wenn du keinen eigenen copyconstructor hast.
    Es wird zwar nichts beim Erzeugen kopiert, Kopien werden aber vom compiler z.B. erstellt wenn du ein objekt als parameter an eine funktion übergibst.
    Kurt



  • naja okayy
    habs jetzt hinbekommen
    danke für die Hilfe!!!!
    Gruß


Anmelden zum Antworten