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
course content

Kursinhalt

C++ OOP

C++ OOP

1. Grundlagen der OOP in C++
2. Konstruktoren und Destruktoren
3. Überblick Über Die Kapselung
4. Überblick Über Vererbung
5. Überblick Über Polymorphismus

book
Konstruktor-Initialisierungsliste

Eine Initialisierungsliste ermöglicht es Konstruktoren, Klassenmitglieder vor Ausführung des Konstruktorkörpers zu initialisieren. Sie 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 in Erwägung ziehen, 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 (value): ein Klassenmitglied, das 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

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

Einschränkungen und Überlegungen

Es gibt ein weit verbreitetes Missverständnis bezüglich der Initialisierungsreihenfolge in der Initialisierungsliste. Entgegen der allgemeinen Annahme 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 bei der Variablendeklaration innerhalb der class zu ändern.

Bei der Verwendung von Initialisierungslisten in einem Konstruktor kann der Argumentname mit dem Attributnamen der class identisch 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 statt auf das Argument zu setzen.

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

course content

Kursinhalt

C++ OOP

C++ OOP

1. Grundlagen der OOP in C++
2. Konstruktoren und Destruktoren
3. Überblick Über Die Kapselung
4. Überblick Über Vererbung
5. Überblick Über Polymorphismus

book
Konstruktor-Initialisierungsliste

Eine Initialisierungsliste ermöglicht es Konstruktoren, Klassenmitglieder vor Ausführung des Konstruktorkörpers zu initialisieren. Sie 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 in Erwägung ziehen, 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 (value): ein Klassenmitglied, das 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

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

Einschränkungen und Überlegungen

Es gibt ein weit verbreitetes Missverständnis bezüglich der Initialisierungsreihenfolge in der Initialisierungsliste. Entgegen der allgemeinen Annahme 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 bei der Variablendeklaration innerhalb der class zu ändern.

Bei der Verwendung von Initialisierungslisten in einem Konstruktor kann der Argumentname mit dem Attributnamen der class identisch 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 statt auf das Argument zu setzen.

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