Sự biểu diễn của kế thừa trong bộ nhớ

Em chào mấy anh/ chị ^^. Em học đến phần kế thừa và có 2 thắc mắc, mong được a/c giải đáp:

  1. Trong hình bên dưới tại sao biết con trỏ(hàm) vtable của B1 quản lí fd() mà không phải do vtable của B2 quản lí?

  2. Giả sử cũng hình bên dưới nhưng không có class B2; class B1 có thêm 1 thuộc tính Private là int xxx; Vậy khi trong Main ta tạo 1 đối tượng D qwert; class D tuy không kế thừa thuộc tính xxx từ B1, nhưng khi khởi tạo đối tượng “qwert” như trên thì đối tượng thuộc class cha(B1) sẽ được tạo ra trước rồi mới tới đối tượng thuộc class con(D), do đó em không biết là thành phần xxx có được tạo ra trong quá trình hàm tạo của class cha dc gọi hay ko (em bị mâu thuẩn chỗ này vì xxx là thành phần của class cha nên khi hàm tạo dc gọi thì xxx cũng phải dc tạo ra, nhưng nếu nó dc tạo ra thì cũng khá dư thừa do trong phạm vị class D cũng chẳng truy cập dc tới nó)?
    nếu có thì có phải xxx sẽ nằm ở ô nhớ đầu ko ạ?


Em cảm ơn mn!

1 Like

Hình này có hai vấn đề:

  • Đã có class mà còn có printf
  • Dùng sai chuỗi định dạng.

Vẫn tạo nhé. Vì class B1 có thể tham chiếu class D, hoặc class D truy cập thông qua các phương thức của B1.

5 Likes

Cái printf đó hình như để xem địa chỉ của đối tượng ấy ạ

Vì để in địa chỉ thì phải dùng "%p" mới chính xác.

4 Likes
  1. Thực sự sơ đồ này chưa thuyết phục vì chưa chỉ ra được vị trí của từng thành phần
  2. private chỉ là access modifier thôi :smiley: nó vẫn là thành phần của subclass nhưng để truy cập phải thông qua phương thức của superclass.
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?