C++-Konstruktor-Initialisierungsliste:Warum und wie man sie verwendet
Beim Instanziieren von Objekten übernehmen Konstruktoren häufig die Initialisierung von Mitgliedsvariablen. Für solche Mitglieder bietet eine Initialisierungsliste für Konstruktoren eine verkürzte und effiziente Möglichkeit ihrer Initialisierung, bevor der Konstruktorkörper ausgeführt wird. Abgesehen von der Leistung ist es manchmal auch aufgrund von const-Variablen oder Mitgliedern einer Basisklasse obligatorisch.
Was ist eine Konstruktor-Initialisierungsliste?
Eine Konstruktor-Initialisierungsliste ist eine Prozedur zum direkten Initialisieren von Mitgliedsvariablen. Daher gibt es keinen Standardkonstruktor, der kopiert und dann zugewiesen wird.
Syntax
Die folgende Syntax zur Initialisierung der Konstruktorliste lautet wie folgt:
ClassName(type1 param1, type2 param2) : member1(param1), member2(param2) {
// Constructor body
}
Hier werden member1 und member2 mit param1 und param2 initialisiert, bevor der Konstruktorkörper ausgeführt wird.
Beispiel für eine Konstruktor-Initialisierungsliste
Hier ist ein einfaches Beispiel, das zeigt, wie eine Initialisierungsliste verwendet wird.
#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 verwenden?
- Um eine Standardinitialisierung mit anschließender Neuzuweisung zu vermeiden und Zeit und Ressourcen zu sparen.
- Es ist für bestimmte Arten von Konstantenvariablen, Referenzmitgliedern und Basisklassenmitgliedern obligatorisch.
- Die gesamte Initialisierungslogik bleibt an einem Ort, getrennt vom Konstruktorkörper.
Sonderfälle
Im Folgenden werden wir einige Sonderfälle für die Konstruktor-Initialisierungsliste diskutieren −
Const- oder Referenzmitglieder
Const-Variablen und Referenzmitglieder 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;
};
Basisklasseninitialisierung
Wenn eine abgeleitete Klasse von einer Basisklasse erbt, können Sie eine Initialisierungsliste verwenden, 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# - Klassen
- switch…case in C (Switch-Anweisung in C) mit Beispielen
- C++ Präprozessor
- C++-Programmierung:Was ist C++ | Lernen Sie grundlegende Konzepte von C++
- C - Entscheidungsfindung
- Umgang mit C++-Dateien:Öffnen, Schreiben, Lesen und Schließen von Dateien in C++
- C++-Multithreading
- Unterschied zwischen Struktur und Klasse:Erklärt mit C++-Beispiel
- C - Variable Argumente
- Master-C-Inkrementierungs- und Dekrementierungsoperatoren:Verwendung und Best Practices