1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Frage zu Memberinitialisierung

  • michi204
  • 11. März 2005 um 14:53
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • michi204
    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
    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.

  • michi204
    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 :rolleyes:

    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
    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
    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
    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.

  1. Datenschutzerklärung
  2. Impressum