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

bookKonstruktor-Initialisierungsliste

Eine Initialisierungsliste ermöglicht es Konstruktoren, Klassenmitglieder vor Ausführung des Konstruktorkörpers zu initialisieren. Dies ist besonders nützlich 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, ausschließlich einen Konstruktor als einfachere Alternative zu verwenden. 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 (value): eine Klassenmembervariable, die mit dem Wert (dem an den Konstruktor übergebenen Argument) initialisiert wird;

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

temperature_sensor.h

temperature_sensor.h

copy
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

copy
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

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

Wenn Sie Initialisierungslisten in einem Konstruktor verwenden, kann der Argumentname identisch mit dem Attributnamen der class sein.

main.cpp

main.cpp

copy
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 verdeutlichen, versuchen Sie, quantity auf null zu setzen, anstatt auf das Argument.

1. Was ist eine Konstruktor-Initialisierungsliste?

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

question mark

Was ist eine Konstruktor-Initialisierungsliste?

Select the correct answer

question mark

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

Select the correct answer

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

bookKonstruktor-Initialisierungsliste

Swipe um das Menü anzuzeigen

Eine Initialisierungsliste ermöglicht es Konstruktoren, Klassenmitglieder vor Ausführung des Konstruktorkörpers zu initialisieren. Dies ist besonders nützlich 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, ausschließlich einen Konstruktor als einfachere Alternative zu verwenden. 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 (value): eine Klassenmembervariable, die mit dem Wert (dem an den Konstruktor übergebenen Argument) initialisiert wird;

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

temperature_sensor.h

temperature_sensor.h

copy
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

copy
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

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

Wenn Sie Initialisierungslisten in einem Konstruktor verwenden, kann der Argumentname identisch mit dem Attributnamen der class sein.

main.cpp

main.cpp

copy
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 verdeutlichen, versuchen Sie, quantity auf null zu setzen, anstatt auf das Argument.

1. Was ist eine Konstruktor-Initialisierungsliste?

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

question mark

Was ist eine Konstruktor-Initialisierungsliste?

Select the correct answer

question mark

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

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3
some-alt