Im folgenden Code sind aus dem Buch "Im Inneren des Objektmodells C++"Fragen zu C++ virtuelle Vererbung
#include <iostream>
using namespace std;
class X{};
class Y: public virtual X{};
class Z: public virtual X{};
class A: public Y, public Z{};
int main()
{
cout<<sizeof(X)<<" "<<sizeof(Y)<<" "<<sizeof(Z)<<" "<<sizeof(A)<<endl;
return 0;
}
In meinem Computer (Windows, VS2010), der Ausgang ist:
Here're meine Fragen
1, sizeof (X) = 1
Das Buch sagen s Wenn X-Typ zwei Instanzen generiert, sagen wir xa und xb. Die Kompilierung fügt ein Byte in A ein, so dass xa und xb unterschiedliche Adressen haben können. Ich verstehe die Gründe nicht ganz.
2, sizeof (Y) = 4
Durch virtuelle Vererbung, werden wir einen zusätzlichen virtuellen Zeiger? Ich denke, das könnte sich vom Polymorphismus unterscheiden. Kann mir jemand das Speicherlayout für Y geben?
Vielen Dank!
Eine Frage pro Frage bitte –
für die 1. Frage, zu überprüfen: http://StackOverflow.com/Questions/621616/c-what-is-the-size-of-an- object-of-empty-class? rq = 1 –
Ich denke, Ihre Hauptfrage ist, dass, weil Y die virtuelle Vererbung verwendet, um von einer nicht-polymorphen Klasse X abzuleiten, und Y selbst nicht-polymorph ist, wird die virutale Vererbung selbst verursachen Y, um eine v-Tabelle so seine Größe zu haben 4 .. – CashCow