Für jede Instanz der Klasse wird Speicher nur seinen Member Variablen zugewiesen, d. h. jede Instanz der Klasse erhält keine eigene Kopie der Memberfunktion. Alle Instanzen teilen den gleichen Mitgliedsfunktionscode. Sie können sich das als Compiler vorstellen, der für jede Elementfunktion einen versteckten this -Zeiger übergibt, damit er auf dem richtigen Objekt operiert. In Ihrem Fall, da der C ++ - Standard explizit Objekte der Größe 0 verbietet, haben Klasse A und Klasse B die minimal mögliche Größe 1. Im Falle der Klasse C, da es eine virtuelle Funktion gibt, hat jede Instanz der Klasse C einen Zeiger auf ihren v -Tabelle (dies ist jedoch Compiler-spezifisch). Also wird die Größe dieser Klasse sizeof (Zeiger) sein.
Die Größe einer Klasse hängt von der Größe der Variablen in der Klasse und nicht von den Funktionen ab. Funktionen werden beim Aufruf nur auf dem Stack zugewiesen und bei der Rückgabe ausgelassen. Die Größe einer Klasse entspricht also in der Regel der Summe der Größen von nicht statischen Membervariablen ...
Nicht-virtuelle Funktionen sind nicht Teil des Klassenspeichers. Der Code für die Funktion wird in die ausführbare Datei eingebettet (ähnlich wie bei einem statischen Member), und der Speicher wird beim Aufruf der Variablen zugewiesen. Das Objekt enthält nur die Datenelemente.
Tags und Links c++