Wie funktioniert Virtueller Methodenaufruf in C++ arbeiten?
Antworten
Zu viele Anzeigen?Durch virtuelle Tische.
Lesen Sie diesen Artikel, http://en.wikipedia.org/wiki/Virtual_table .
Ich könnte es hier erklären, aber die Wikipedia macht es besser als ich.
Der C++-Standard legt nicht fest, wie der Mechanismus der virtuellen Funktionen implementiert werden soll.
Ich denke, dass alle aktuellen C++-Compiler virtuelle Tabellen verwenden.
Bei Klassen, die mindestens eine virtuelle Funktion enthalten, ist es üblich, einen versteckten Zeiger auf eine sogenannte virtuelle Tabelle zu haben, in der die Adressen der virtuellen Funktionen für eine bestimmte Klasse in compilerspezifischer Reihenfolge eingetragen sind.
Jeder Konstruktor setzt dann diesen versteckten Zeiger auf die virtuelle Tabelle der Klasse, zu der er gehört.
Mit VTables und Funktionszeigern. Die Funktionszeiger der virtuellen Funktionen werden in der VTable aufgelistet
MFC verwendet eine Message Map anstelle einer virtuellen Funktion, was die Größenbeschränkung verringert. Wenn wir mehrere virtuelle Funktionen verwenden, wird die VTable am Ende sehr groß.