Z tego co wiem, wielkość klasy w c ++ zależy od następujących czynników -
- Rozmiar wszystkich niestatycznych elementów danych.
- Kolejność członków danych.
- Jeśli uzupełnianie bajtów jest włączone, czy nie.
- Rozmiar jego bezpośredniej klasy bazowej.
- Istnienie funkcji wirtualnych.
- Tryb dziedziczenia (dziedziczenie wirtualne).
Teraz utworzyłem 2 klasy, jak poniżej -
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;
};
teraz po sprawdzeniu rozmiaru A i BI zobacz
- rozmiar A: 16
- rozmiar B: 16
moje założenie jest takie, że char c w klasie B mieści się w „otworze” pozostawionym w klasie A.
Ale, co mnie pomyliło, to poniższy scenariusz, w którym upubliczniam członków
class A{
public:
int a;
short d;
int b;
char s;
};
class B : public A{
public:
char c;
};
Teraz rozmiar się zmienia
- rozmiar A: 16
- rozmiar B: 20
Nie potrafię zrozumieć przyczyny tej różnicy.