Salve a tutti!
Vorrei un chiarimento riguardante la seguente situazione: consideriamo la seguente gerarchia tra classi
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).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; };
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.

Rispondi quotando