Hãy xem xét các đoạn mã sau:C++: ảo Inheritance
#...
class A {};
class B: public A{};
class C: virtual public A{};
class D: virtual public C{};
// No More Classes
...
int _tmain(int argc, _TCHAR* argv[]) {
cout<<sizeof(A)<<" ";
cout<<sizeof(B)<<" ";
cout<<sizeof(C)<<" ";
cout<<sizeof(D)<<".";
...
}
O/P: 1 1 4 8.
Câu hỏi:
- sizeof (A) = 1byte, và vị trí này giữ những gì đáng kể cho trình biên dịch/chúng tôi.
- Tại sao trình biên dịch bận tâm thêm vptr vào đối tượng lớp C khi không có gì thực sự nằm.
- Nếu chúng tôi không có bất kỳ chức năng ảo nào, trình biên dịch sẽ thêm một vptr thừa vào các đối tượng có nguồn gốc.
*. 'Câu hỏi đầu tiên của tôi ở đây, xin vui lòng sửa tôi nếu bạn tìm thấy bất cứ điều gì sai trái.
Đối với câu hỏi đầu tiên ở đây: +1 cho bài đăng tốt, được định dạng tốt và tự giải thích. –
Tôi không thực sự thấy bất kỳ câu hỏi nào, chỉ là một danh sách các câu lệnh. –
@JoachimPileborg - "2. Tại sao trình biên dịch bận tâm để thêm vptr trong đối tượng lớp C khi không có gì thực sự cư trú". Tôi đoán '3.' giống như' .2'. Và '1.' rất có thể - cho thấy OP biết tại sao kết quả là' 1'. –