Betrachten der Code unter:C++: virtuelle Vererbung
#...
class A {};
class B: public A{};
class C: virtual public A{};
class D: virtual public C{};
// No More Classes
...
int _tmain(int argc, _TCHAR* argv[]) {
cout<<sizeof(A)<<" ";
cout<<sizeof(B)<<" ";
cout<<sizeof(C)<<" ";
cout<<sizeof(D)<<".";
...
}
O/P: 1 1 4 8.
Frage:
- sizeof (A) = 1 Byte, und diese Lage halte was für den Compiler wichtig/us.
- Warum Compiler Mühe, vptr in C-Klasse-Objekt hinzufügen, wenn es nichts tatsächlich residiert.
- Wenn wir keine virtuelle Funktion haben, fügt der Compiler den abgeleiteten Objekten einen zusätzlichen vptr hinzu.
*. es ist meine erste Frage hier, bitte korrigieren Sie mich, wenn Sie etwas falsch gefunden haben.
Für eine erste Frage hier: +1 für eine gute, gut formatierte und selbsterklärende Beitrag. –
Ich sehe wirklich keine Fragen, nur eine Liste von Aussagen. –
@JoachimPileborg - "2. Warum Compiler Mühe, vptr in C-Klasse-Objekt hinzufügen, wenn es nichts wirklich residiert". Ich denke, '3.' ist das gleiche wie' .2'. Und "1." ist höchstwahrscheinlich - was zeigt, dass der OP weiß, warum das Ergebnis "1" ist. –