2012-09-07 51 views
6
  1. Kế thừa ảo có sử dụng vTable không? Nếu có hoặc không, Sau đó, cách triển khai
  2. Cách thức kế thừa ảo hoạt động trong bộ nhớ?
  3. Bất kỳ phương án thay thế nào khác cho thừa kế ảo

Thực sự đánh giá cao giải thích khái niệm.Tính năng kế thừa ảo hoạt động như thế nào?

+0

Thực hiện được xác định. – ildjarn

+0

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ỏ. –

+1

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. –

Trả lời

1

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.

+0

Cảm ơn bạn rất nhiều! Dường như bỏ phức tạp! bạn có thể giới thiệu cho tôi một số bài viết hoặc cuốn sách đơn giản để đọc về điều này không. –

+0

@NayanaAdassuriya Tôi đã đọc những kiến ​​thức này trong các bài đăng tiếng mẹ đẻ của mình, vì vậy tôi không quen thuộc với sách bằng tiếng Anh. Tôi đoán bạn có thể tìm kiếm "c + + bố trí bộ nhớ ảo thừa kế" trong google, có rất nhiều bài viết tuyệt vời. – halfelf

Các vấn đề liên quan