Pelo que sei, o tamanho de uma classe em c ++ depende dos fatores abaixo -
- Tamanho de todos os membros de dados não estáticos.
- Ordem dos membros dos dados.
- Se o preenchimento de bytes estiver ativado ou não.
- Tamanho de sua classe base imediata.
- A existência de funções virtuais.
- Modo de herança (herança virtual).
Agora eu criei 2 classes como abaixo -
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;
};
agora, verificando o tamanho de A e BI, veja
- tamanho de A: 16
- tamanho de B: 16
minha suposição é que o char c na classe B é acomodado no "buraco" deixado na classe A.
Mas, o que me confunde é o cenário abaixo, em que eu publico os membros
class A{
public:
int a;
short d;
int b;
char s;
};
class B : public A{
public:
char c;
};
Agora o tamanho se torna
- tamanho de A: 16
- tamanho de B: 20
Não consigo entender o motivo dessa diferença.