1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Frage zu Memberinitialisierung

  • michi204
  • 11. März 2005 um 14:53
  • Unerledigt
  • michi204
    26
    michi204
    Mitglied
    Reaktionen
    63
    Punkte
    7.268
    Beiträge
    1.318
    • 11. März 2005 um 14:53
    • #1

    Hallo! Ich bin gerade dabei, mir ein paar gtkmm-Tutorials anzusehen und bin auf ein paar Zeilen C++-Code gestoßen, die ich (mangels Erfahrung in dieser Sprache) nicht wirklich ganz verstehe:

    hier die Klassendefinition:

    Code
    class HelloWorld : public Gtk::Window
    {
    public:
    HelloWorld();
    virtual ~HelloWorld();
    protected:
    virtual void on_button_clicked();
    Gtk::Button m_button;
    };



    und hier das interessante codestück:

    Code
    HelloWorld::HelloWorld() [color=magenta]: m_button ("Test")[/color]
    /*: m_button("Hello World") // creates a new button with the label "Hello World".
    {*/
    {
    set_border_width(10);
    m_button.signal_clicked().connect(sigc::mem_fun(*this, &HelloWorld::on_button_clicked));
    add(m_button);
    m_button.show();
    }



    und zwar verstehe ich den rosa markierten teil nicht ganz.. hier wird irgendwie die membervariable initialisiert, aber gibt es dazu keine andere äquivalente schreibweise (edit: ich meine eine im methodenrumpf anwendbare)? habe so was bisher noch nicht gesehen, und meine 2 c++-bücher schweigen sich darüber auch aus..

    lg michi

  • Irrlicht
    7
    Irrlicht
    Mitglied
    Reaktionen
    1
    Punkte
    421
    Beiträge
    82
    • 11. März 2005 um 16:05
    • #2
    Zitat von michi204


    und zwar verstehe ich den rosa markierten teil nicht ganz.. hier wird irgendwie die membervariable initialisiert, aber gibt es dazu keine andere äquivalente schreibweise

    Das ist nicht nur irgendwie sondern _die_ Initialisierung. Das da nach dem Doppelpunkt ist die Initialisierungsliste, da schreibt man quasi alle Member und ihre Initialisierungswerte rein.

    Code
    HelloWorld::HelloWorld() : /* <-- ab hier dann */

    Wenn du das nicht so magst, hindert dich natürlich auch keiner dran, das so zu schreiben (edit: es sei denn das GTK, das kenne ich nicht):

    Code
    HelloWorld::HelloWorld() 
    {
       m_button = Gtk::Button ("Hallo Welt.");
    }

    Allerdings solltest du beachten, dass alle Variablen in C++, bevor ihnen so ein Wert zugewiesen wird, _irgendeinen_ Inhalt haben. Wenn du vor dieser Zeile irgendwas mit dem m_button machen willst, ist das dann eben böse und es kann zu Inkonsistenzen kommen. Daher verwendet man eben die Initalisierungsliste, weil vor der garantiert nix anderers mit den Membern gemacht wird.

    das irrlicht

  • michi204
    26
    michi204
    Mitglied
    Reaktionen
    63
    Punkte
    7.268
    Beiträge
    1.318
    • 11. März 2005 um 16:27
    • #3

    danke für die info, ich werde mir wohl neue c++-literatur besorgen müssen :face_with_rolling_eyes:

    Zitat von Irrlicht

    Wenn du das nicht so magst, hindert dich natürlich auch keiner dran, das so zu schreiben (edit: es sei denn das GTK, das kenne ich nicht):

    ja, das tut es auch... das hatte ich sogar schon probiert, jedoch macht mir button.h einen strich durch die rechnung. es ist wohl schon so gedacht, wie ich es im beispiel gefunden habe..

    lg michi

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 13. März 2005 um 12:21
    • #4

    Wenn man z.B. Referenzen oder sonstige Typen ohne Zuweisungsoperator als Member hat, dann ist die Initialisierungsliste die einzige Möglichkeit, diesen Dingen einen Wert zuzuweisen.

  • michi204
    26
    michi204
    Mitglied
    Reaktionen
    63
    Punkte
    7.268
    Beiträge
    1.318
    • 13. März 2005 um 14:53
    • #5
    Zitat von Ringding

    Wenn man z.B. Referenzen oder sonstige Typen ohne Zuweisungsoperator als Member hat, dann ist die Initialisierungsliste die einzige Möglichkeit, diesen Dingen einen Wert zuzuweisen.

    ich glaube in meinem fall ist der zuweisungsoperator private..

    lg michi

  • phax
    5
    phax
    Mitglied
    Punkte
    205
    Beiträge
    41
    • 13. März 2005 um 15:51
    • #6

    Man sollte aber von vornherein darauf achten, dass die Reihenfolge der Initialisierung mit der Reihenfolge im Headerfile übereinstimmt, sonst meckert gcc mit der Option -Wall.

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung