Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Konstruktor-Initialisierungsliste | Constructors and Destructors
C++ OOP

Konstruktor-Initialisierungsliste

Swipe um das Menü anzuzeigen

Eine Initialisierungsliste ermöglicht es Konstruktoren, Klassenmitglieder vor Ausführung des Konstruktorkörpers zu initialisieren. Besonders nützlich ist sie für komplexe Initialisierungen oder beim Arbeiten mit Objekten von Klassen, die const-Mitglieder enthalten.

Syntax der Initialisierungsliste

Die Syntax von Initialisierungslisten kann zunächst übermäßig komplex und verwirrend erscheinen. Man könnte erwägen, stattdessen nur einen Konstruktor zu verwenden, da dies einfacher wirkt. Mit wachsendem Programmumfang erweisen sich Initialisierungslisten jedoch als praktisch und unkompliziert in der Anwendung.

  • : (Doppelpunkt-Symbol): leitet die Member-Initialisierungsliste in einem Konstruktor ein;

  • member (Wert): eine Klassen-Membervariable, die mit dem Wert (dem an den Konstruktor übergebenen Argument) initialisiert wird;

  • { } (geschweifte Klammern): der Körper des Konstruktors, in dem nach der Member-Initialisierung zusätzlicher Code ausgeführt werden kann.

temperature_sensor.h

temperature_sensor.h

1234567
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };

Einschränkungen und Überlegungen

Es gibt ein häufiges Missverständnis bezüglich der Initialisierungsreihenfolge in der Initialisierungsliste. Entgegen der landläufigen Meinung erfolgt die Initialisierung von Variablen in der Initialisierungsliste nicht in der Reihenfolge, in der sie geschrieben sind. Stattdessen wird sie durch die Reihenfolge der Member-Deklarationen in der Klasse bestimmt, nicht durch die Reihenfolge in der Initialisierungsliste.

main.cpp

main.cpp

123456789101112131415
#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; }
Note
Hinweis

Versuche, die Reihenfolge der Initialisierung der Variablen total in der Initialisierungsliste und in der Variablendeklaration innerhalb der class zu ändern.

Bei der Verwendung von Initialisierungslisten in einem Konstruktor kann das Argument denselben Namen wie das Attribut der class haben.

main.cpp

main.cpp

123456789101112131415
#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; }

Wenn Sie jedoch denselben Namen sowohl für die Member-Variablen als auch für die Argumente verwenden, erhält total den Wert der multiplizierten Argumente, nicht der Member. Um dies zu sehen, versuchen Sie, quantity auf null statt auf das Argument zu setzen.

1. Was ist eine Initialisierungsliste im Konstruktor?

2. Welches Symbol leitet die Member-Initialisierungsliste in einem Konstruktor ein?

question mark

Was ist eine Initialisierungsliste im Konstruktor?

Wählen Sie die richtige Antwort aus

question mark

Welches Symbol leitet die Member-Initialisierungsliste in einem Konstruktor ein?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 2. Kapitel 3
some-alt