Reihenfolge von Konstruktor- und Destruktoraufrufen bei der Vererbung
Bei der objektorientierten Programmierung mit Vererbung ist das Verständnis der Reihenfolge von Konstruktor- und Destruktoraufrufen von entscheidender Bedeutung . Dies wird besonders wichtig, wenn es um mehrere Basisklassen und Objektzusammensetzungen geht.
Beachten Sie die folgende Klassenhierarchie:
struct A { A() { cout << "A() C-tor" << endl; } ~A() { cout << "~A() D-tor" << endl; } }; struct B : public A { B() { cout << "B() C-tor" << endl; } ~B() { cout << "~B() D-tor" << endl; } A a; };
In der Hauptfunktion:
int main() { B b; }
Hier sind die Regeln, die die Reihenfolge der Konstruktor- und Destruktoraufrufe in dieser Vererbung regeln Hierarchie:
Konstruktoraufrufe:
Destruktoraufrufe:
Die Reihenfolge der Destruktoraufrufe ist umgekehrt zum Konstruktoraufruf Reihenfolge:
Standardinitialisierungsliste:
Auch ohne eine explizit definierte Initialisierungsliste wird das Mitgliedsfeld initialisiert, bevor der Konstruktor der abgeleiteten Klasse aufgerufen wird. In diesem Fall würde a mit dem Standardkonstruktor von A initialisiert werden.
Daher wäre die erwartete Ausgabe für den Code in der Hauptfunktion:
A() C-tor A() C-tor B() C-tor ~B() D-tor ~A() D-tor ~A() D-tor
Das obige ist der detaillierte Inhalt vonWie werden Konstruktoren und Destruktoren bei der C-Vererbung aufgerufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!