Thursday, February 4, 2010

What is vprt, v-table and how virtual function works

Whenever a program has a virtual function declared, a v - table is constructed for the class. The v-table consists of addresses to the virtual functions for classes that contain one or more virtual functions. The object of the class containing the virtual function contains a virtual pointer that points to the base address of the virtual table in memory. Whenever there is a virtual function call, the v-table is used to resolve to the function address. An object of the class that contains one or more virtual functions contains a virtual pointer called the vptr at the very beginning of the object in the memory. Hence the size of the object in this case increases by the size of the pointer. This vptr contains the base address of the virtual table in memory. Note that virtual tables are class specific, i.e., there is only one virtual table for a class irrespective of the number of virtual functions it contains. This virtual table in turn contains the base addresses of one or more virtual functions of the class. At the time when a virtual function is called on an object, the vptr of that object provides the base address of the virtual table for that class in memory. This table is used to resolve the function call as it contains the addresses of all the virtual functions of that class

3 comments:

  1. Hello this article is really nice as a job seeker i always look for a better option, I would like to share a website with you which provides the interview questions and their answers of all the top companies. Visit www.dhung.com

    ReplyDelete
  2. Hey,


    Grazie! Grazie! Grazie! Your blog is indeed quite interesting around It's all fundamental C++ Interview Questions rest just follows it! agree with you on lot of points!

    Getting memory violation error when I use string function "strlwr", what wrong in step 3, please help, I am new to c language

    Very useful article, if I run into challenges along the way, I will share them here.


    Kind Regards,
    Yamini

    ReplyDelete