Il seguente codice sono tratti dal libro "Dentro modello a oggetti C++"Domande su C++ Inheritance virtuale
#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;
}
nel mio computer (Windows, VS2010), l'output è:
Here're mie domande
1, sizeof (X) = 1
Il libro dicono s quando il tipo X genera due istanze, ad esempio xa e xb. la compilazione inserisce un byte in A in modo che xa e xb possano avere indirizzi diversi. Non capisco le ragioni.
2, sizeof (Y) = 4
Utilizzando l'ereditarietà virtuale, avremo un puntatore virtuale aggiuntivo? Immagino che questo potrebbe essere diverso dal puntatore virtuale nel polimorfismo. Qualcuno può darmi il layout di memoria per Y?
Grazie!
Una domanda per domanda per favore –
per la 1a domanda, controllare: http://stackoverflow.com/questions/621616/c-che-è-la-size-di-an- object-of-an-empty-class? rq = 1 –
Penso che la tua domanda principale sia quella in cui Y usa l'ereditarietà virtuale per derivare da una classe non polimorfica X, e Y stessa non è polimorfica, sarà l'ereditarietà stessa del virus Y per avere un v-table quindi la sua dimensione è 4 .. – CashCow