C++ Frage zu Konstruktor

Gast #7303282

Hallo guten Tag, diese Schreibweise kenne ich noch nicht von einem Konstruktor: Dort habe ich es her: https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/sec-helloworld.html

Aber es funktioniert... Worum handelt es sich denn hierbei?

1
HelloWorld::HelloWorld()
2
    : m_button("Hello World") // creates a new button with label "Hello World"
3
{... }

Danke :)

Gast #7303322

Böllermeister schrieb:

Sebastian V. schrieb:

Ich nehme an du meinst den Teil hinter dem Doppelpunkt? Das ist die Member Initialization List. Da können Membervariablen und auch Basisklassen initialisiert werden.

Ok danke! Kannte ich gar nicht.

ja ist wieder sowas was die welt nicht braucht. wirst du noch öfter sehen bei c++

#7303337

Da Baby schrieb:

Böllermeister schrieb:

Sebastian V. schrieb:

Ich nehme an du meinst den Teil hinter dem Doppelpunkt? Das ist die Member Initialization List. Da können Membervariablen und auch Basisklassen initialisiert werden.

Ok danke! Kannte ich gar nicht.

ja ist wieder sowas was die welt nicht braucht. wirst du noch öfter sehen bei c++

Oje, da compiliert einer seine Programme wohl nur mit -O0. :)

#7303361

Wenn Du noch nie einen Elementinitialisierer benutzt hast, dann hast Du

  • ggf. Zuweisungen im ctor-Rumpf verwendet (meistens falsch),
  • ggf. Elemente primitiver DT uninitialisiert gelassen (falsch),
  • ggf. bisher nur in-class Initialisierer verwendet (geht nur, falls unabhängig von ctor-Parametern)
  • ggf. noch nicht viel in C++ programmiert,
  • ...
#7303364

Wilhelm M. schrieb:

Wenn Du noch nie einen Elementinitialisierer benutzt hast, dann hast Du

  • ggf. Zuweisungen im ctor-Rumpf verwendet (meistens falsch),
  • ggf. Elemente primitiver DT uninitialisiert gelassen (falsch),
  • ggf. bisher nur in-class Initialisierer verwendet (geht nur, falls unabhängig von ctor-Parametern
  • ggf. noch nicht viel in C++ programmiert.
  • noch nie const verwendet
  • noch nie Basisklassenkonstruktoren mit Parametern aufgerufen
  • ...

Da Baby schrieb:

ja ist wieder sowas was die welt nicht braucht.

Die Welt braucht kein C++. Aber C++ braucht diese initialization list. Ohne gehts einfach nicht.

Oliver

Gast #7303654

Die Welt braucht unified initialization oder wie das heißt :)

1
HelloWorld::HelloWorld()
2
    : m_button{"Hello World"} // creates a new button with label "Hello World"
3

4
{
5
  std::string s{m_button};
6
  ...
7
  for (size_t i{0}; i != s.size(); ++i) {
8
    ...
9
  }
10
}
#7303936

loeti2 schrieb:

Die Welt braucht unified initialization oder wie das heißt :)

Heißt: uniform initialization syntax

1
> HelloWorld::HelloWorld()
2
>     : m_button{"Hello World"} // creates a new button with label "Hello 
3
> World"
4
> 
5
> {
6
>   std::string s{m_button};
7
>   ...
8
>   for (size_t i{0}; i != s.size(); ++i) {
9
>     ...
10
>   }
11
> }
12
>

Wusste gar nicht, dass std::string so einen ctor hat ;-) Oder Gtk::Button einen entsprechenden Typumwandlungs-Op ...

Gast #7308733

Wilhelm M. schrieb:

Wusste gar nicht, dass std::string so einen ctor hat ;-) Oder Gtk::Button einen entsprechenden Typumwandlungs-Op ...

Man lernt nie aus. Nee war mein Fehler.

Richtig cool wäre es wenn die uniform initialization syntax auch für default-Funktionsargumente gehen würde.

1
void foo(int i{0});
2

3
void foo(int i) {
4
  ...
5
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.