To implement virtual functions, C++ uses a special form of late binding known as the virtual table. The virtual table is a lookup table of functions used to resolve function calls in a dynamic/late binding manner.
Every class that uses virtual functions (or is derived from a class that uses virtual functions) is given it’s own virtual table.
A virtual table contains one entry for each virtual function that can be called by objects of the class. Each entry in this table is simply a function pointer that points to the most-derived function accessible by that class.
the compiler also adds a hidden pointer to the base class, which we will call *vptr. *vptr is set (automatically) when a class instance is created so that it points to the virtual table for that class.