Wie ruft man einen Konstruktor einer Klasse von einem anderen Konsturktor dieser Klasse auf?



  • Hallo,

    ich hab folgende Frage:

    Ich hab eine Klasse Dummy mit nem CString-member id und nem bool-member isChecked (spielt eigentlich hierfür keine Rolle).

    Die Klasse hat 2 Konsturktoren - einen vollen:

    Dummy::Dummy(CString id, bool isChecked){
         this->id = id;
         this->isChecked = isChecked;
     }
    

    und einen, dem nur die id übergeben wird:

    Dummy::Dummy(CString id){
        Dummy(id, false);
    }
    

    Um Code zu sparen, ruft der zweite Konstruktor einfach den vollen Konstruktor auf...so kenn ich das von Java...aber das Problem ist, dass dann auch der Destruktor aufgerufen wird und letztendlich das erstellte Dummy-Objekt eine leere ID hat....

    Jetzt beim Schreiben kann ich mir sogar vorstellen, woran das liegt. Wahrscheinlich wird im zweiten Konstruktor durch den Aufruf des anderen Konstruktors nur ein temporäres Objekt erzeugt....das eigentliche Dummy-Objekt wird nie mit der id initialisiert...ok...aber wie würde man denn dann den anderen Konstruktor in C++ aufrufen....???

    Besten Dank...



  • Das sind C++ Grundlagen, ich schieb dich mal. 🙂



  • Diese Möglichkeit gibt es in C++ leider nicht. Du könntest aber den Teil der Initialisierung, den alle Konstruktoren benötigen, in eine gemeinsame Init()-Funktion auslagern.

    (für dich würde vermutlich schon ein Dafault-Parameter ausreichen: "Dummy::Dummy(CString id, bool isChecked=false);")



  • maxpower24 schrieb:

    Ich hab eine Klasse Dummy mit nem CString-member id und nem bool-member isChecked (spielt eigentlich hierfür keine Rolle).

    Die Klasse hat 2 Konsturktoren - einen vollen:

    Dummy::Dummy(CString id, bool isChecked){
         this->id = id;
         this->isChecked = isChecked;
     }
    

    und einen, dem nur die id übergeben wird:

    Dummy::Dummy(CString id){
        Dummy(id, false);
    }
    

    Um Code zu sparen, ruft der zweite Konstruktor einfach den vollen Konstruktor auf...so kenn ich das von Java...aber das Problem ist, dass dann auch der Destruktor aufgerufen wird und letztendlich das erstellte Dummy-Objekt eine leere ID hat....

    Jetzt beim Schreiben kann ich mir sogar vorstellen, woran das liegt. Wahrscheinlich wird im zweiten Konstruktor durch den Aufruf des anderen Konstruktors nur ein temporäres Objekt erzeugt....das eigentliche Dummy-Objekt wird nie mit der id initialisiert...ok...aber wie würde man denn dann den anderen Konstruktor in C++ aufrufen....???

    Dein Gedanke mit dem temporären Objekt stimmt.

    Versuch folgendes:

    Dummy::Dummy(CString id, bool isChecked = false )    
    {
         this->id = id;
         this->isChecked = isChecked;
     }
    

    Diesen Konstruktor kannst Du nun
    new Dummy( "String" );
    oder
    new Dummy( "String", true );
    aufrufen. Den zweiten Konstruktor brauchst Du dann nicht mehr.

    Das Aufrufen von anderen Konstruktoren wird von C++ leider nicht unterstützt.

    EDIT: Ich sollte auch lesen, was in Klammern steht....


Anmelden zum Antworten