Heim >Backend-Entwicklung >C++ >Warum verhalten sich virtuelle Funktionen während der C-Objektinitialisierung unerwartet?
Vererbung und Objektinitialisierung in C für den Zugriff auf virtuelle Funktionen verstehen
In C ermöglicht die Vererbung die Erstellung abgeleiteter Klassen, die Eigenschaften und Verhaltensweisen erben aus Basisklassen. Die Initialisierungsreihenfolge von Objekten in C kann sich jedoch auf das Verhalten virtueller Funktionen auswirken.
Frage:
Wenn ein Objekt in C mit einer Basisklasse erstellt wird, die eine virtuelle Funktion hat Funktion, warum verhält sich diese Funktion möglicherweise unerwartet?
Antwort:
Der Schlüssel Konzept ist hier die Reihenfolge der Initialisierung für Basis- und abgeleitete Klassen. In C werden Basisklassen vor abgeleiteten Klassen erstellt.
Erklärung:
Im bereitgestellten Beispiel:
Um dieses Verhalten zu beheben:
Um sicherzustellen, dass die value()-Funktion der abgeleiteten Klasse während der Objektkonstruktion aufgerufen wird, sollten Sie Folgendes tun Initialisieren Sie die Basisklasse explizit mit der Adresse der abgeleiteten Klasseninstanz:
derived example; base(&example).value()
Indem Sie die Adresse des abgeleiteten Objekts übergeben, weisen Sie den Basiskonstruktor dazu an Rufen Sie die Funktion value() für das abgeleitete Objekt auf und „reifen“ Sie das Objekt effektiv in seine vollständige abgeleitete Form.
Das obige ist der detaillierte Inhalt vonWarum verhalten sich virtuelle Funktionen während der C-Objektinitialisierung unerwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!