2010-08-24 36 views
8

thể trùng lặp:
why do I need virtual table?vtable là gì trong C++

vtable là gì trong C++?
Đã biết vtable là một bảng ảo có một mảng con trỏ đến các chức năng ảo. Có bài viết nào có triển khai thực tế không? (Mọi bước đi qua sẽ được đánh giá cao)

+1

http://en.wikipedia.org/wiki/Virtual_method_table – DumbCoder

+0

http://stackoverflow.com/questions/2173493/virtual-table-c – DumbCoder

+3

Trừ khi bạn lập kế hoạch viết trình biên dịch, thông tin này không liên quan đến việc hiểu C++ . –

Trả lời

13

Bảng V (hoặc bảng ảo) là cách triển khai C++ làm đa hình. Đối với mỗi thực hiện cụ thể của một lớp, có một bảng các con trỏ hàm cho tất cả các phương thức ảo. Một con trỏ tới bảng này (được gọi là bảng ảo) tồn tại như một thành viên dữ liệu trong tất cả các đối tượng. Khi ta gọi một phương thức ảo, chúng ta tra cứu bảng v của đối tượng và gọi phương thức lớp dẫn xuất thích hợp.

+0

Nếu lớp cơ sở của bạn Foo có một phương thức ảo, thì lớp dẫn xuất của bạn sẽ có vtable và trình liên kết sẽ kiểm tra (nếu thiếu nó nói, tham chiếu không xác định đối với 'vtable cho Bar ') – Will

4

C++-Lite-Faq là điểm khởi đầu tốt.

+0

Liên kết bị hỏng, vui lòng cập nhật hoặc xóa. – donturner

+0

@donturner IMHO downvoting là thô lỗ. Googling C++ Lite Faq cho trang này là kết quả thứ hai. Bạn có thể cứu tôi kết thúc sự cố khác bằng cách tự chỉnh sửa phản hồi. Xét cho cùng, câu trả lời là 7 tuổi. – phadej

+0

@phadej liên kết chỉ có câu trả lời được cau mày vì lý do chính xác này: một nguồn lực bên ngoài có thể di chuyển hoặc bị xóa hoặc thay đổi và câu trả lời ở đây cần phải tự cung tự cấp. – bolov

1

Đối với tất cả giá trị của nó, nó không phải là thuật ngữ C++ chuẩn. Nó chỉ là một chi tiết triển khai được triển khai thực hiện để thực hiện các chức năng ảo/liên kết động

+6

Nó không phải là thuật ngữ của tiêu chuẩn, hoặc tiêu chuẩn hóa ở tất cả, nhưng nó là một thuật ngữ khá chuẩn. Dù sao, điều này sẽ tốt hơn như một bình luận vì nó không cố gắng trả lời câu hỏi. – Potatoswatter