Frage zu Konstruktoren



  • Moin,

    ich muss aus einer Vorlage heraus ein Programm schreiben. In der Vorlage ist eine Klasse enthalten, welche die Systemvariablen ausliest und in einen Vector schreibt. In dem Konstruktor von der Klasse aus der Vorlage habe ich ein paar Probleme mit dessen Signatur:

    Path::Path() : vector<string> (){
    

    Dabei ist mir schon klar, dass es sich hier um den Konstruktor das Klasse Path() handelt ;-), allerdings weiss ich nicht, was das mit :vector<string> () bedeutet und auf sich hat.

    Gruss



  • auf den : folgt die sog. Initialisierungsliste in der Basisklassen und Membervariablen initialisiert werden:

    class A : public B
    {
        A()
        : a(1), // a mit 1 initialisert
        B()     // konstruktor von B
        {}
        int a;
    };
    

    Wie es aussieht erbt dein Path von vector<string>, was ziemlich unschön ist.

    class A : std::vector<std::string>
    {
        A()
        :std::vector<std::string>() // Konstruktor von vector
        {}
    };
    


  • brotbernd schrieb:

    auf den : folgt die sog. Initialisierungsliste in der Basisklassen und Membervariablen initialisiert werden:

    class A : public B
    {
        A()
        : a(1), // a mit 1 initialisert
        B()     // konstruktor von B
        {}
        int a;
    };
    

    Und damit hast du gleich ein schönes Beispiel geliefert wie mans nicht machen soll: Basisklassen werden vor den Membervariablen initialisiert, ganz egal in welcher Reihenfolge man sie in der Initialisierungsliste aufführt. Ebenso werden Membervariablen in der Reihenfolge ihrer Deklaration initialisiert - unabhängig von der Reihnefolge in der Initialisierungsliste.
    Man sollte daher in der Initialisierungsliste die einzelnen Initialisierungen so anordnen wie sie auch tatsächlich vom Compiler ausgeführt werden und nicht anders.



  • oh je, schande über mich, da war ich wohl zu eilig 😋
    Hätte man das Bsp. kompiliert hätte man ja aber auch (evtl. je nach Compiler) eine schöne Warnung bekommen, die wir ja alle beachten 😉
    Der Konstruktor ist übrigens auch private, was in diesem Beispiel auch nicht ganz praktisch ist.


Anmelden zum Antworten