Từ những gì tôi biết, kích thước của một lớp trong c ++ phụ thuộc vào các yếu tố dưới đây -
- Kích thước của tất cả các thành viên dữ liệu không tĩnh.
- Thứ tự của các thành viên dữ liệu.
- Nếu đệm byte được kích hoạt hay không.
- Kích thước của lớp cơ sở ngay lập tức của nó.
- Sự tồn tại của các chức năng ảo.
- Chế độ thừa kế (thừa kế ảo).
Bây giờ tôi đã tạo 2 lớp như dưới đây -
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;
};
Bây giờ kiểm tra kích thước của A và BI xem
- kích thước của A: 16
- kích thước của B: 16
giả định của tôi là char c trong lớp B được chứa trong "lỗ" còn lại trong lớp A.
Nhưng, điều làm tôi bối rối là kịch bản dưới đây trong đó tôi công khai các thành viên
class A{
public:
int a;
short d;
int b;
char s;
};
class B : public A{
public:
char c;
};
Bây giờ kích thước trở thành
- kích thước của A: 16
- kích thước của B: 20
Tôi dường như không thể hiểu lý do cho sự khác biệt này.