Heim > Backend-Entwicklung > C++ > Wie werden Konstruktoren und Destruktoren bei der C-Vererbung aufgerufen?

Wie werden Konstruktoren und Destruktoren bei der C-Vererbung aufgerufen?

Patricia Arquette
Freigeben: 2024-11-29 04:10:09
Original
296 Leute haben es durchsucht

How are Constructors and Destructors Called in C   Inheritance?

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;
};
Nach dem Login kopieren

In der Hauptfunktion:

int main() {
    B b;
}
Nach dem Login kopieren

Hier sind die Regeln, die die Reihenfolge der Konstruktor- und Destruktoraufrufe in dieser Vererbung regeln Hierarchie:

Konstruktoraufrufe:

  1. Basisklassenkonstruktion: Konstruktoraufrufe beginnen mit der Basisklasse. In diesem Fall wird zuerst der Konstruktor von A aufgerufen.
  2. Memberfeldkonstruktion: Als Nächstes werden Memberfelder in der Reihenfolge erstellt, in der sie in der abgeleiteten Klasse deklariert werden. In diesem Fall wird das Feld a von B vom Typ A konstruiert.
  3. Konstruktion abgeleiteter Klassen: Schließlich wird der Konstruktor der abgeleiteten Klasse B aufgerufen.

Destruktoraufrufe:

Die Reihenfolge der Destruktoraufrufe ist umgekehrt zum Konstruktoraufruf Reihenfolge:

  1. Abgeleiteter Klassendestruktor: Der Destruktor der abgeleiteten Klasse B wird zuerst aufgerufen.
  2. Mitgliedsfelddestruktor: Als nächstes wird der Destruktor des Mitgliedsfelds a aufgerufen und zerstört dessen Instanz von A.
  3. Basisklassen-Destruktor: Schließlich wird der Destruktor der Basisklasse A aufgerufen.

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage