Salve a tutti!
Vorrei un chiarimento riguardante la seguente situazione: consideriamo la seguente gerarchia tra classi
codice:
class persona
{
protected:
int p;
};
class studente:virtual public persona
{
protected:
int s;
};
class lavoratore:virtual public persona
{
protected:
int l;
};
class studente_lavoratore: public studente, public lavoratore
{
private:
int sl;
};
In tale situazione, ereditando la classe base "persona" utilizzando la parola "virtual", si evita che nella classe studente_lavoratore ci siano due copie della variabile int p.(Cosa che accadrebbe se si togliesse la parola virtual).
Detto ciò, se si prova a fare una sizeof degli oggetti di queste quattro classi, la situazione è la seguente:
-sizeof(persona) 4 byte----> int p 4 byte
-sizeof(studente) 12 byte---->int s 4 byte e int p 4 byte
-sizeof(lavoratore) 12 byte--->int l 4 byte e int p 4 byte
-sizeof(studente_lavoratore) 24 byte--->int sl 4 byte, int s 4 byte, int l 4 byte e int p 4 byte
Per un oggetto di classe "studente", perchè la sizeof restituisce 12 byte? Cosa viene aggiunto?
Stesso dicasi per la classe "lavoratore" e per la classe "studente_lavoratore". Cosa viene aggiunto?
Grazie.