Kính chào các thầy cô, anh, chị và các bạn!
Mọi người đều biết vtable sẽ được sinh ra cho mỗi class có phương thức ảo(hoặc class kế thừa từ một class khác có phương thức ảo).
Mỗi vtable sẽ chứa các con trỏ hàm trỏ đến các phương thức ảo đồng thời mỗi đối tượng thuộc class(kể cả class cha và class con)
sẽ có kích thước tăng thêm 4byte(hoặc 2bytes tùy hệ điều hành) để chứa vpointer(con trỏ đến vtable), nhờ vpointer và vtable và
dynamic binding(hay còn gọi là late binding) mà phương thức cần gọi sẽ được gọi một cách chính xác( gọi là đa hình).
Ngoài ra, vtable và vpointer còn "xuất hiện" trong kế thừa ảo(virtual inheritance, dùng để giải quyết vấn đề hình thoi trong đa kế thừa)
và do đó cũng là tăng kích thức của các đối tượng thuộc lớp kế thừa ảo đó(để chưa vpointer). Em chỉ biết có đến đây, và cũng đã tìm
hiểu xem nó hoạt động ra làm sao. google search có rất nhiều kết quả chẳng hạn https://www.cprogramming.com/tutoria...heritance.html,
hoặc https://stackoverflow.com/questions/...d-in-compilers và một số trang web khác nhưng
em vẫn chưa thực sự hiểu "CHÍNH XÁC THÌ VTABLE VÀ VPOINTER ĐÃ HOẠT ĐỘNG NHƯ THẾ NÀO ĐỂ GIẢI QUYẾT VẤN ĐỀ HÌNH THOI???".
Mong thầy cô, anh chị, các bạn chỉ giáo giúp em phần này ạ?
Thank all!
Mọi người đều biết vtable sẽ được sinh ra cho mỗi class có phương thức ảo(hoặc class kế thừa từ một class khác có phương thức ảo).
Mỗi vtable sẽ chứa các con trỏ hàm trỏ đến các phương thức ảo đồng thời mỗi đối tượng thuộc class(kể cả class cha và class con)
sẽ có kích thước tăng thêm 4byte(hoặc 2bytes tùy hệ điều hành) để chứa vpointer(con trỏ đến vtable), nhờ vpointer và vtable và
dynamic binding(hay còn gọi là late binding) mà phương thức cần gọi sẽ được gọi một cách chính xác( gọi là đa hình).
Ngoài ra, vtable và vpointer còn "xuất hiện" trong kế thừa ảo(virtual inheritance, dùng để giải quyết vấn đề hình thoi trong đa kế thừa)
và do đó cũng là tăng kích thức của các đối tượng thuộc lớp kế thừa ảo đó(để chưa vpointer). Em chỉ biết có đến đây, và cũng đã tìm
hiểu xem nó hoạt động ra làm sao. google search có rất nhiều kết quả chẳng hạn https://www.cprogramming.com/tutoria...heritance.html,
hoặc https://stackoverflow.com/questions/...d-in-compilers và một số trang web khác nhưng
em vẫn chưa thực sự hiểu "CHÍNH XÁC THÌ VTABLE VÀ VPOINTER ĐÃ HOẠT ĐỘNG NHƯ THẾ NÀO ĐỂ GIẢI QUYẾT VẤN ĐỀ HÌNH THOI???".
Mong thầy cô, anh chị, các bạn chỉ giáo giúp em phần này ạ?
Thank all!
Comment