Vtable is a form of late binding – a lookup table of functions that resolve function calls dynamically. This article explains what a virtual table is, how to answer theoretical questions regarding vtables, and how to use it in practical C++ interview tests.
Vtables and Their Many Names
Vtables can be referred to as virtual function tables, dispatch tables, virtual method tables (VTM), virtual call tables, or vftables. Remember to mention this to interviewers because they will be impressed with candidates who are familiar with C++ terminology.
What Does a Vtable Do?
Vtables are virtual mechanisms used in programming languages such as C++ or Java to provide support for dynamic dispatch or runtime method binding. To get an idea of what this means, you should know that when a class defines a virtual function, a hidden member variable is often added to the class so that it can point to a specific group of pointers and/or functions. This is the vtable.
These pointers can be implemented at runtime to call to specific functions. If implemented at compile time, it might not be clear whether the base function or a derived function should be called to implement a class.
Let’s take an example. If we have a superclass named “Canine”, which includes two subclasses named “Dog” and “Wolf” and this superclass defined the virtual function named “Sound”, the accurate implementation of the two subclasses would be “Bark” and respectively “Howl”.
Each time a program calls the “Sound” method on a “Canine” pointer, it is crucial that the calling code is able to determine which implementation type to use (“Bark” or “Howl”). This cannot be done at compile-time because the decision regarding the appropriate subclass to utilize cannot be done at compile-time.
Vtables permit objects to use various implementation procedures by using different sets of method pointers. They include the addresses to the dynamically bound methods of the objects. Then the method calls are conducted by providing the address of the method from the dispatch table of the object. A dispatch table is identical for all the objects a certain class and it is commonly shared between them.
Vtables and Vpointers
In C++, compilers typically create a vtable for every class. Then, when an object is created, it will also receive a hidden member, which is the pointer to its vtable. This is called a vpointer (VPTR) or a virtual table pointer.
The compiler will also assign a hidden code in each class’ constructor that can initialize the vpointer to the address of the new object’s vtable. Vpointers are usually placed as either the first or last members of the object.
This should give you an idea on what vtables are and how to use them in C++, as well as how to answer the main interview questions regarding them. If you are interested in more related IT interview questions, we recommend reading our collection of C++ interview questions, all about virtual destructors in C++, and the main differences between inline and macro functions.