Kursinhalt
C++ OOP
C++ OOP
Konstruktor-Initialisierungsliste
Eine Initialisierungsliste ist ein Mechanismus, der in Konstruktoren verwendet wird, um eine Möglichkeit zur Initialisierung der Datenmitglieder einer Klasse bereitzustellen, bevor der Körper des Konstruktors ausgeführt wird. Dies kann besonders nützlich sein, wenn es um Instanzen mit komplexen Initialisierungsanforderungen geht oder wenn mit Objekten von Klassen gearbeitet wird, die const- oder Referenzmitglieder enthalten.
Syntax der Initialisierungsliste
Die Syntax von Initialisierungslisten mag übermäßig komplex und verwirrend erscheinen. Man könnte in Erwägung ziehen, nur einen Konstruktor als einfachere Alternative zu verwenden. Wenn das Programm jedoch wächst, erweisen sich Initialisierungslisten als bequem und einfach zu nutzen.

-
: (Doppelpunkt-Symbol) : führt die Member-Initialisierungsliste in einem Konstruktor ein.
-
member(value) : eine Klassenmitgliedsvariable, die mit dem Wert (Argument, das an den Konstruktor übergeben wird) initialisiert wird.
-
{ } (Klammern) : der Körper des Konstruktors, in dem zusätzlicher Code nach der Member-Initialisierung ausgeführt werden kann.
Einschränkungen und Überlegungen
Es gibt ein häufiges Missverständnis bezüglich der Reihenfolge der Initialisierung in der Initialisierungsliste. Entgegen der landläufigen Meinung folgt die Initialisierung von Variablen in der Initialisierungsliste nicht der Reihenfolge, in der sie geschrieben sind. Stattdessen wird sie durch die Reihenfolge der Member-Deklaration in der Klasse bestimmt, nicht durch die Reihenfolge in der Initialisierungsliste.
main
#include <iostream> class Exchanger { public: Exchanger(float _quantity, float _rate) : quantity(_quantity), rate(_rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Hinweis
Versuchen Sie, die Reihenfolge der Initialisierung der Variablen total in der Initialisierungsliste und in der Variablendeklaration innerhalb der Klasse zu ändern.
Wenn Sie Initialisierungslisten in einem Konstruktor verwenden, kann der Argumentname derselbe sein wie der Attributname der Klasse.
main
#include <iostream> class Exchanger { public: Exchanger(float quantity, float rate) : quantity(quantity), rate(rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Aber wenn Sie denselben Namen sowohl für die Mitgliedsvariablen als auch für die Argumente verwenden, nimmt das Total den Wert der multiplizierten Argumente, nicht der Mitglieder an. Um dies zu sehen, versuchen Sie, die Menge auf null anstelle des Arguments zu setzen.
1. Was ist eine Konstruktor-Initialisierungsliste?
2. Welches Symbol leitet die Member-Initialisierungsliste in einem Konstruktor ein?
Danke für Ihr Feedback!