Thừa kế ảo được triển khai theo cách khác nhau tùy thuộc vào trình biên dịch.
1) Có, cả vc và gcc đều sử dụng con trỏ vTable. Nhưng vc có một con trỏ khác là con trỏ cơ sở ảo.
2) Đối với thừa kế ảo cổ điển, như Left < Top; Phải < Hàng đầu; Đáy < trái và bên phải Các stack nên được như thế này:
Left.vptr // -> to its vtable
Left::element_in_left
Right.vptr
Right::element_in_right
Bottom::element_in_bottom
Top::element_in_top
Programs sử dụng vptr để tìm vtable, cho gcc, có một cơ sở ảo giá trị bù đắp trong khả thi. vptr + offset cơ sở sẽ cung cấp địa chỉ gốc.
3) Tôi không chắc chắn ý của bạn là gì. Có nhiều cách khác nhau để thực hiện nó trong trình biên dịch C++. Và các ngôn ngữ khác có cách để liên kết các hàm.
Thực hiện được xác định. – ildjarn
Nó được thực hiện phụ thuộc, trong điều kiện kỹ thuật nghiêm ngặt nó là * Unspecified *, tiêu chuẩn C++ chỉ mô tả hành vi mà thừa kế ảo đã cung cấp nhưng nó không chỉ định cách nó nên được triển khai.Đó là trái ra như là một chi tiết cho việc triển khai & họ ar không cần thiết để xác định chi tiết này.Having nói rằng hầu hết (* đọc tất cả * biết) của các trình biên dịch sử dụng một bảng ảo và cơ chế con trỏ. –
Có nói trên, không nghĩ rằng Q là không thích hợp hoặc không phải là một Q thực sự.Tất cả các trình biên dịch sử dụng một cơ chế tương tự và mặc dù nó không cần thiết để biết chi tiết thực hiện, nó không làm tổn thương để biết nó. Ngoài ra, Q này được hỏi rất nhiều lần nó sẽ làm cho một C++ - faq đẹp nếu ai đó đưa ra thời gian và trả lời nó một cách thuyết phục. –