2010-08-24 14 views
8

Powiel możliwe:
why do I need virtual table?Co jest vtable w C++

Co jest vtable w C++?
poznawaliśmy vtable jest stół wirtualny, który ma tablicę wskaźników do funkcji wirtualnych. Czy istnieje artykuł z praktyczną realizacją? (Każda spacer zostaną docenione)

+1

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

+0

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

+3

Jeśli nie masz zamiaru pisać kompilatora, ta informacja nie ma znaczenia dla zrozumienia C++ . –

Odpowiedz

13

V-tablice dynamiczne (lub tabel wirtualnych) są jak najbardziej implementacje C++ zrobić polimorfizm. Dla każdej konkretnej implementacji klasy istnieje tabela wskaźników funkcji dla wszystkich metod wirtualnych. Wskaźnik do tej tabeli (nazywany tabelą wirtualną) istnieje jako element danych we wszystkich obiektach. Kiedy wywołujemy metodę wirtualną, sprawdzamy tabelę v obiektu i wywołuje odpowiednią metodę klasy pochodnej.

+0

Jeśli klasa bazowa Foo ma metodę wirtualną, wówczas klasa pochodna Bar będzie miał vtable i łącznik będzie sprawdzić, że (jeśli brakuje mi mówi, niezdefiniowana odniesienia do 'vtable dla Bar ') – Will

4

C++-Lite-Faq jest dobrym punktem startu.

+0

Złamany link, zaktualizuj lub usuń. – donturner

+0

@donturner IMHO downvoting był niegrzeczny. Googling C++ Lite Faq podaje stronę jako drugi wynik. Możesz uratować mi inne kłopoty, samodzielnie edytując odpowiedź. W końcu odpowiedź ma 7 lat. – phadej

+0

@phadej Link tylko odpowiedzi są na boczyć na dokładnym tego powodu: zasób zewnętrzny może przenieść lub usunąć lub zostać zmieniony i odpowiedź tutaj trzeba być samowystarczalny. – bolov

1

Dla wszystkich, że warto, że nie jest to standardowy terminologia C++. To jest po prostu szczegółów wdrażania wykorzystywane przez wdrożenie do realizacji funkcji wirtualnych/wiążącą

+6

To nie jest terminologia standardu, lub w ogóle ustandaryzowana, ale jest to dość standardowy termin. W każdym razie byłoby lepiej jako komentarz, ponieważ nie próbuje odpowiedzieć na pytanie. – Potatoswatter