Forum: PC-Programmierung C++ Frage zu Konstruktor


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Böllermeister (Gast)


Lesenswert?

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 :)

von Sebastian V. (sebi_s)


Lesenswert?

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.

von Böllermeister (Gast)


Lesenswert?

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.

von Da Baby (Gast)


Lesenswert?

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

von Vincent H. (vinci)


Lesenswert?

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

von Wilhelm M. (wimalopaan)


Lesenswert?

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

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

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

von loeti2 (Gast)


Lesenswert?

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
}

von Wilhelm M. (wimalopaan)


Lesenswert?

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

von loeti2 (Gast)


Lesenswert?

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.