consideri il codice qui sottoC++: Inheritance virtuale
#...
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.
Domanda:
- sizeof (A) = 1 byte, e questa posizione tenere ciò che è significativo per il compilatore/noi.
- Perché il compilatore si preoccupa di aggiungere vptr in oggetto classe C quando non vi è nulla in realtà risiede.
- Se non si dispone di alcuna funzione virtuale, il compilatore sta aggiungendo un vptr aggiuntivo agli oggetti derivati.
*. è la mia prima domanda qui, correggimi se hai trovato qualcosa di sbagliato.
Per una prima domanda qui: +1 per un post buono, ben formattato e auto-esplicativo. –
Non vedo nessuna domanda, solo una lista di affermazioni. –
@JoachimPileborg - "2. Perché il compilatore si preoccupa di aggiungere vptr in oggetto classe C quando non vi è nulla in realtà". Immagino che '3.' sia lo stesso di .2'. E '' 'è molto probabile - mostrando che l'OP sa perché il risultato è' 1'. –