Da quello che so, la dimensione di una classe in c ++ dipende dai seguenti fattori:
- Dimensione di tutti i membri di dati non statici.
- Ordine dei membri dei dati.
- Se il riempimento di byte è abilitato o meno.
- Dimensione della sua classe base immediata.
- L'esistenza di funzioni virtuali.
- Modalità di eredità (eredità virtuale).
Ora ho creato 2 classi come di seguito -
class A{
int a;
short s;
int b;
char d;
};// kept a char at last on purpose to leave a "hole"
class B : public A{
char c;
};
ora sul controllo delle dimensioni di A e BI vedere
- dimensione di A: 16
- dimensione della B: 16
la mia ipotesi è che il carattere c nella classe B sia alloggiato nella "buca" lasciata nella classe A.
Ma ciò che mi ha confuso è lo scenario seguente in cui pubblico i membri
class A{
public:
int a;
short d;
int b;
char s;
};
class B : public A{
public:
char c;
};
Ora la dimensione diventa
- dimensione di A: 16
- dimensione della B: 20
Non riesco a capire il motivo di questa differenza.