Initialisierungsliste nur für Konstruktoren oder auch für Memberfunktionen
-
Sind Initialisierungslisten generell nur für Konstruktoren angebracht oder z. B. auch in Settern verwendbar? Der Name "Initialisierungsliste" impliziert ja eigentlich die Verwendung im Zuge der Membervariablen-Initialisierung, das heißt der ersten Wertzuweisung an diese Variablen. Also machen sie in Settern usw. keinen Sinn, oder? (Weil man hier ja erneute Zuweisungen macht)
-
TheBrain schrieb:
[...]
So ist das.
-
Dacht ich es mir doch

Und wie war das noch gleich mit der Vollständigkeit von Initialisierungslisten: Wenn ich z. B. die Member einer Klasse
class Klasse { ... private: int bla; std::string blup; ... };habe, kann ich dann folgenden Konstruktor verwenden:
Klasse::Klasse(int a) : bla(a) {}Oder muss ich die String-Membervariable auch initialisieren? Bzw. kann ich das später irgendwann machen, z. B. wenn sie das erste Mal verwendet wird?
-
Ja, kannst Du verwenden, musst nicht alle Member initialisieren.
-
Airdamn schrieb:
Ja, kannst Du verwenden, musst nicht alle Member initialisieren.
Das stimmt zwar, aber man vergisst eher mal Variablen wenn man in der Initialisierungsliste immer nur einzelne mitführt (Wenn man grundsätzlich alle auflistet, fällt einen eher mal auf das man etwas vergessen hat).
TheBrain schrieb:
Oder muss ich die String-Membervariable auch initialisieren? Bzw. kann ich das später irgendwann machen, z. B. wenn sie das erste Mal verwendet wird?
Du kannst ihr später einen Wert zuweisen, initialisieren im Sinne das man einen Anfangswert festlegt ist aber grundsätzlich nur in der Initialisierungsliste möglich (Was auch erklärt warum Konstanten und Referenzen nur in der Initialisierungsliste "initialisiert" werden können).
Ich habe noch einen anderen Grund die Initialisierungsliste komplett zu schreiben:
Falls man doch mal einen Benutzerdefinierten Kopierkonstruktor oder Zuweisungsoperator hat, kann man mit Copy-Paste schon mal einen wesentlichen Grundstock setzen ohne einen Wert zu vergessen
cu André
-
TheBrain schrieb:
Oder muss ich die String-Membervariable auch initialisieren? Bzw. kann ich das später irgendwann machen, z. B. wenn sie das erste Mal verwendet wird?
Wenn Objekte von Klassen nicht in der Initialisierungsliste explizit initialisiert werden, wird ihr Standardkonstruktor aufgerufen. Ein
std::stringwäre dann z.B. eine leere Zeichenkette. Skalare Typen werden aber nicht initialisiert, wenn sie nicht in der Initialisierungsliste aufgeführt sind.
-
Ok, ich danke euch!
-
Nexus schrieb:
Skalare Typen werden aber nicht initialisiert, wenn sie nicht in der Initialisierungsliste aufgeführt sind.
Gleiches gilt für POD-Klassen und Arrays aus PODs.