จากสิ่งที่ฉันรู้ขนาดของคลาสใน c ++ ขึ้นอยู่กับปัจจัยด้านล่าง -
- ขนาดของสมาชิกข้อมูลที่ไม่คงที่ทั้งหมด
- ลำดับของสมาชิกข้อมูล
- หากเปิดใช้งานการเสริมไบต์แล้วหรือไม่
- ขนาดของคลาสฐานทันที
- การมีอยู่ของฟังก์ชั่นเสมือนจริง
- โหมดของการสืบทอด (การสืบทอดเสมือน)
ตอนนี้ฉันได้สร้าง 2 ชั้นดังนี้
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;
};
ตอนนี้ในการตรวจสอบขนาดของ A และ BI เห็น
- ขนาดของ A: 16
- ขนาด B: 16
สมมติฐานของฉันคือถ่าน c ในคลาส B รองรับใน "หลุม" ที่เหลืออยู่ในคลาส A
แต่สิ่งที่ทำให้ฉันสับสนคือสถานการณ์ด้านล่างที่ทำให้ฉันเปิดเผยต่อสมาชิก
class A{
public:
int a;
short d;
int b;
char s;
};
class B : public A{
public:
char c;
};
ตอนนี้กลายเป็นขนาด
- ขนาดของ A: 16
- ขนาด B: 20
ฉันไม่สามารถเข้าใจเหตุผลของความแตกต่างนี้ได้