warum der erste Aufruf Basisklassenkonstruktor und dann die abgeleitete Klasse den Konstruktor
Nach c++ - Regeln bei der Definition einer abgeleiteten Klasse object, die Basisklasse Konstruktor initialisiert die Basisklasse Mitglieder und dann der Konstruktor der abgeleiteten Klasse. Für den Destruktor, der Regel zurückgesetzt.
Frage ich mich, warum diese Regel befolgt werden sollten. Warum die erste base Konstruktor und dann abgeleitete Klasse den Konstruktor? Gibt es einen Grund, dies zu tun? oder einfach nur, weil es der definition von c++.
Dank,
- "bei der Definition einer abgeleiteten Klasse object, die Basisklasse Konstruktor initialisiert die Basisklasse Mitglieder und dann der Konstruktor der abgeleiteten Klasse" und " Warum erste abgeleitete Konstruktor und dann Basisklassenkonstruktor?" ..... Sie scheinen verwirrt zu sein...
- Dank sehr viel. Ich habe aktualisiert es.
- oh, und es ist nicht eine Regel, die Sie befolgen sollten, sein, wie die Sprache funktioniert, und es gibt nichts Sie tun können, um es zu ändern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
weil die Mitglieder der abgeleiteten Klasse kann abhängen auf die Mitglieder der Basisklasse, die Mitglieder der Basisklasse initialisiert werden, zuerst.
Man kann nicht behaupten, im Gegenteil.
Wird ein Objekt der Klasse Typ besteht aus teilobjekten - seine Basis-Klasse Unterobjekte und (nicht-statische) Datenelemente.
Bevor ein Unterobjekt aufgebaut ist, an seinem Platz ist raw nicht initialisierten Speicher, die müssen Sie nicht wie ein Objekt.
Die Unterobjekte eines Objekts konstruiert werden, bevor der Körper der Konstruktor für das Objekt eingegeben wird, so dass Sie können verwenden Sie diese Unterobjekte im Konstruktor Körper.
Basisklasse teilobjekten aufgebaut sind, bevor Sie Mitglied von SOS ist nur eine Regel, aber möglicherweise motiviert durch die folgenden Beobachtungen:
Einen technischen Grund für diese Konstruktion ist, um die Compiler in der Regel initialisieren Sie die Daten, die benötigt werden für-Polymorphismus (vtable-Zeiger) in Konstruktoren. Also zuerst eine Basisklasse Konstruktor initialisiert diese für seine Klasse, dann der Konstruktor der abgeleiteten Klasse überschreibt diese Daten für die abgeleitete Klasse. Dies entspricht auch den Regeln für das Verhalten von polymorphen Funktionen in Konstruktoren.