2016-11-17 4 views
1

Ich habe mit dem Konzept der Konstrukteure im Kontext der Vererbung gekämpft. Diese Verwirrung wurde durch die Tatsache verstärkt, dass große Änderungen an diesem Thema mit C + 11 eingeführt wurden (d. H. Basiskonstruktoren können vererbt werden?).Erstellt eine Vererbungskette eine Kette von Konstruktoraufrufen?

Also meine Frage:

ich nicht Vererbung Konstruktor Unter der Annahme, sondern nur einen neuen Konstruktor in meiner abgeleiteten Klasse definiert, wird der Basiskonstruktor noch genannt werden? Es scheint, als ob es nicht sollte, aber ich bin auf einige Dokumente gestoßen, die besagen, dass dies geschieht. Bedeutet das weiter, dass Sie, wenn Sie eine Vererbungskette haben, eine Reihe von Konstruktoren namens? Wenn ja, in welcher Reihenfolge? Base vor abgeleiteten oder abgeleiteten vor der Base?

Vielen Dank! Hier

+0

Wenn Sie nicht 'super()' nennen, glaube ich, dass die Antwort _no_ ist. –

+1

@EricM. Die Antwort ist immer noch Nein mit 'super()', weil es nicht kompiliert wird –

+0

LOL! Ich wusste, dass es in Java funktioniert hat ... Ich war 60%, vielleicht 70% sicher, dass es in C++ funktioniert hat. TIL. –

Antwort

2

ist die Reihenfolge:

Hier ist, was passiert eigentlich, wenn abgeleitet instanziiert wird:

  1. Speicher für abgeleitet wird aufgehoben (genug, um sowohl für die Basis und Abgeleitete Teile)
  2. Der entsprechende abgeleitete Konstruktor heißt
  3. Das Base-Objekt wird zunächst mit dem entsprechenden Basiskonstruktor erstellt. Wenn kein Basiskonstruktor angegeben ist, wird der Standardkonstruktor verwendet.
  4. Die Initialisierungsliste initialisiert Variablen
  5. Der Körper des Konstruktor ausgeführt
  6. Steuerung an den Aufrufer zurückgegeben wird

Hoffe, es hilft.

+1

Könnten Sie bitte Schritt 2 und 3 erklären. In Schritt 2 heißt es, dass der abgeleitete Konstruktor aufgerufen wird, und dann in Schritt 3 heißt es, das Basisobjekt wird zuerst mit dem entsprechenden Basiskonstruktor konstruiert. Was heißt zuerst? – Izzo

+0

Wie ich weiß, bevor der abgeleitete Konstruktor etwas Wesentliches tun kann, wird zuerst der Basiskonstruktor aufgerufen. Der Basiskonstruktor richtet den Basisabschnitt des Objekts ein, das Steuerelement wird an den Konstruktor "Abgeleitet" zurückgegeben, und der Konstruktor "Abgeleitet" kann seinen Job beenden. – GAVD

+0

Was ist der Unterschied zwischen Schritt 2 und Schritt 5? Was bedeutet es, den Konstruktor aufzurufen, wenn er seinen Körper nicht ausführt? – Barmar

Verwandte Themen