top button
Flag Notify
    Connect to us
      Site Registration

Site Registration

How does virtual function work internally ?

0 votes
392 views
How does virtual function work internally ?
posted Aug 22, 2014 by Ganesh

Share this question
Facebook Share Button Twitter Share Button LinkedIn Share Button

1 Answer

0 votes

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. The virtual table sometimes goes by other names, such as “vtable”, “virtual function table”, “virtual method table”, or “dispatch table”.

The virtual table is actually quite simple, though it’s a little complex to describe in words. First, every class that uses virtual functions (or is derived from a class that uses virtual functions) is given it’s own virtual table. This table is simply a static array that the compiler sets up at compile time. 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.

Second, 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. Unlike the this pointer, which is actually a function parameter used by the compiler to resolve self-references, __vptr is a real pointer. Consequently, it makes each class object allocated bigger by the size of one pointer. It also means that __vptr is inherited by derived classes, which is important.

answer Aug 22, 2014 by Salil Agrawal
Similar Questions
+2 votes

When a function is declared as virtual and when a class ? Please explain with examples.

0 votes

Explain about pure virtual function

+3 votes

Also provide some details on how virtual table get created and how that works?

+2 votes

I would like to know, if there is any difference (in allocated memory space) between defining a function inline in the class declaration (with the inline word), and defining a function inline explicit after the class declaration.

...