C++ Konstruktor-Initialisierungsliste: Warum und wie man sie einsetzt
Beim Instanziieren von Objekten übernehmen Konstruktoren oft die Initialisierung von Membervariablen. Für solche Member bietet eine Initialisierungsliste für Konstruktoren einen prägnanten und effizienten Weg, sie vor Ausführung des Konstruktorkörpers zu initialisieren. Abgesehen von Performance ist sie manchmal zwingend – bei const-Variablen oder Membern einer Basisklasse.
Was ist eine Konstruktor-Initialisierungsliste?
Eine Konstruktor-Initialisierungsliste ist ein Verfahren, Membervariablen direkt zu initialisieren, sodass kein Default-Konstruktor aufgerufen und dann zugewiesen wird.
Syntax
Folgender Syntax für die Initialisierungsliste:
KlassenName(Typ1 Param1, Typ2 Param2) : Member1(Param1), Member2(Param2) { // Konstruktorkörper }
Hier werden Member1 und Member2 mit Param1 und Param2 initialisiert, bevor der Konstruktorkörper läuft.
Beispiel: Konstruktor-Initialisierungsliste
Ein einfaches Beispiel zur Demonstration:
#include <iostream> #include <string> class Student { public: Student(const std::string& name, int age) : name(name), age(age) {} void display() const { std::cout << "Name: " << name << ", Age: " << age << "\n"; } private: std::string name; int age; }; int main() { Student s("Navya", 20); s.display(); return 0; }
Ausgabe
Name: Navya, Age: 20
Warum Konstruktor-Initialisierungslisten nutzen?
- Um Default-Initialisierung gefolgt von Zuweisung zu vermeiden – spart Zeit und Ressourcen.
- Sie ist zwingend für bestimmte Typen: const-Variablen, Referenzmember und Basisklassenmember.
- Sie hält die Initialisierungslogik an einem Ort, getrennt vom Konstruktorkörper.
Spezielle Fälle
Im Folgenden besprechen wir einige Spezialfälle für Konstruktor-Initialisierungslisten:
Const- oder Referenzmember
Const-Variablen und Referenzmember können nicht neu zugewiesen werden, daher müssen sie in einer Initialisierungsliste initialisiert werden.
class Config { public: Config(const std::string& product, const int & model) : product(product), model(model) {} private: const std::string product; const int & model; };
Basisklassen-Initialisierung
Wenn eine abgeleitete Klasse von einer Basisklasse erbt, können Sie eine Initialisierungsliste nutzen, um den Basisklassenkonstruktor aufzurufen.
class Base { public: Base(int value) : baseValue(value) {} protected: int baseValue; }; class Derived : public Base { public: Derived(int value, int extra) : Base(value), extraValue(extra) {} private: int extraValue; };
C Sprache
- C# Ausdrücke, Anweisungen & Blöcke: Umfassender Leitfaden mit Beispielen
- C++ Vererbungsmodelle: Mehrfach, Mehrstufig, Hierarchisch
- C# Operatorüberladung: Benutzerdefinierte Operatoren für eigene Typen
- Coded UI Test Automation Framework: Umfassender Einsteigerleitfaden
- C++ Datei-I/O: Lesen & Schreiben mit fstream
- Dynamische Speicherallokation in C: malloc, calloc, realloc & free meistern
- C Bedingte Anweisungen meistern: IF, IF-ELSE und verschachtelte IF-ELSE erklärt
- C-Structs und Zeiger meistern: Praxisleitfaden
- Die C++ break-Anweisung meistern
- C Typecasting: Implizite und explizite Konvertierungen mit Code-Beispielen meistern