Por lo que sé, el tamaño de una clase en c ++ depende de los siguientes factores:
- Tamaño de todos los miembros de datos no estáticos.
- Orden de los miembros de datos.
- Si el relleno de bytes está habilitado o no.
- Tamaño de su clase base inmediata.
- La existencia de funciones virtuales.
- Modo de herencia (herencia virtual).
Ahora he creado 2 clases de la siguiente manera:
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;
};
ahora en comprobar el tamaño de A y BI ver
- tamaño de A: 16
- tamaño de B: 16
mi suposición es que el carbón en la clase B se acomoda en el "agujero" que queda en la clase A.
Pero, lo que me confunde es el siguiente escenario en el que hago públicos a los miembros
class A{
public:
int a;
short d;
int b;
char s;
};
class B : public A{
public:
char c;
};
Ahora el tamaño se convierte
- tamaño de A: 16
- tamaño de B: 20
Parece que no puedo entender la razón de esta diferencia.