Mechanizm funkcji wirtualnych, występujący także pod nazwą „późnego wiązania”, jest bardzo ważny elementem języka programowania. Pozwala na wywołania innej wersji metody w zależności od obiektu na rzecz którego metoda jest wywoływana.  Największe zastosowanie funkcji wirtualnych to umożliwienie przechowywanie obiektów w kolekcjach jako obiektów klasy bazowej, a wywoływanie metod które dotyczą faktycznego typu obiektu.
O ile w przypadku funkcji niewirtualnych kompilator nie ma problemu z obliczeniem adresu funkcji w czasie kompilacji i konsolidacji, a wywołanie odnosi się do obliczonego statycznego adresu.
W przypadku funkcji wirtualnych sprawa wygląda trochę inaczej, ponieważ funkcja którą należy wywołać zależy również od typu obiektu na rzecz którego następuje próba wywołania. Dlatego kompilator tworzy sobie dla każdej klasy tabelę wywołań funkcji wirtualnych v-table. Tabela jest tworzona 1 dla jednej klasy i jest wspólna dla wszystkich obiektów danej klasy. Tabela v-table jest tworzona tylko wtedy gdy została zadeklarowana przynajmniej jedna funkcja wirtualna. Każda klasa ma wskaźnik na tabelę funkcji wirtualnych z której korzysta kiedy ma wywołać metodę która została zadeklarowana jako wirtualna. Wskaźnik tablicy wirtualnej jest zazwyczaj pierwszym elementem obiektu. Wynikający z istnienia vtable narzut pamięciowy jest raczej skromny. Rozmiar obiektu rośnie o wielkość samego wskaźnika, czyli o 4KB a zapotrzebowanie całego programu jest wprost proporcjonalne do ilości funkcji wirtualnych.
ovp-fig6