[C++] Initalisierungsliste



  • Hi,

    ich noch eine kleine Frage, sorry 🙄

    Und zwar geht es um Initialisierungsliste in cpp.

    Hier ein Konstruktor mit einer normalen Initialisierungsliste:

    Terminal::Terminal(std::string a_meinString) : meinString(a_meinString) {}

    Ich muss bei dem Übergabeparameter "a_meinString" schreiben.

    Folgendes lässt sich bei mir nicht kompilieren:

    Terminal::Terminal(std::string meinString) : this->meinString(meinString) {}

    Der this-Zeiger funktoniert in der Initialisierungslite nicht. Im Methodenrumpf funktoniert er aber.
    Gibt es eine Möglichkeit der Instanz- und Parametervariablen den gleichen Namen zu geben um so seine Instzanzvariablen zu initialisieren?

    mfg byte



  • Die Initialisierungsliste wird
    vor dem Konstruktoraufruf
    abgearbeitet, den this-Zeiger
    gibts zu der Zeit noch nicht. 🙂



  • achso, also wenn ich den this-Zeiger verwenden will kann ich das nur im Methodenrumf tun?

    Dann muss ich meinen Übergabeparametern wenn ich eine Initialisierungliste erstelle ja immer andere Namen geben 😞

    mfg byte



  • ByteRix schrieb:

    Dann muss ich meinen Übergabeparametern wenn ich eine Initialisierungliste erstelle ja immer andere Namen geben 😞

    Frage: Was spricht denn dagegen? Solange der Name eindeutig ist, ist dem Compiler egal, was du angibst.



  • Glaube du bringst was durcheinander: Initalisierungsliste mit default Parametern bei der Konstruktordefinition und Initalisierungsliste beim anlegen einer konkreten Klasseninstanz sind zwei Sachen.



  • Auf allen mir bekannten Compilern funktioniert das. Ist irgendwie auch logisch, denn in der Klammer wird der Übergabeparameter verwendet weil das lokale Scope vor den Members kommt, und zum initialisieren gibts ja nur Baseclasses oder Members.

    Also ich mein sowas:

    struct Foo {
        Foo(int bar) : bar(bar) { }
        int bar;
    };
    

    Gruß



  • Helmut S. schrieb:

    den this-Zeiger
    gibts zu der Zeit noch nicht. 🙂

    this gibts zu der Zeit schon. Der Standard sieht nur keine Möglichkeit vor, es explizit in der Initialisierungsliste zu verwenden.

    ByteRix schrieb:

    achso, also wenn ich den this-Zeiger verwenden will kann ich das nur im Methodenrumf tun?

    Explizit, ja. Wobei das nicht für den Wert in den Klammern gilt, also der Quelle. Dort kannst du this schon verwenden (aber bitte mit Vorischt).

    ByteRix schrieb:

    Dann muss ich meinen Übergabeparametern wenn ich eine Initialisierungliste erstelle ja immer andere Namen geben 😞

    Genau wegen solchen Namenskonflikten benutzen Programmierer nicht selten eine spezielle Namensgebung für Member. Anhänger der Ungarischen Notation verwenden zB Präfix m_, andere zB Postfix _ .


Anmelden zum Antworten