Dari apa yang saya tahu, ukuran kelas di c ++ tergantung pada faktor-faktor di bawah ini -
- Ukuran semua anggota data non-statis.
- Urutan anggota data.
- Jika byte padding diaktifkan atau tidak.
- Ukuran kelas dasar langsungnya.
- Adanya fungsi virtual.
- Mode pewarisan (virtual inheritance).
Sekarang saya telah membuat 2 kelas seperti di bawah ini -
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;
};
sekarang di cek ukuran A dan BI lihat
- ukuran A: 16
- ukuran B: 16
Asumsi saya adalah char c di kelas B ditampung di "hole" yang tersisa di kelas A.
Tapi, yang membingungkan saya adalah skenario di bawah ini di mana saya membuat anggota publik
class A{
public:
int a;
short d;
int b;
char s;
};
class B : public A{
public:
char c;
};
Sekarang ukurannya menjadi
- ukuran A: 16
- ukuran B: 20
Saya sepertinya tidak mengerti alasan perbedaan ini.