[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [LC++]virtual functions



On 29/10/2004, at 1:14 PM, choube mehul wrote:

how many?

For each object of class base or class derived. Here: one virtual table for object 'd'.

one for base?
and one for derived?

You have just one object 'd', so you have just one virtual table within the memory space of that object.

now if i add a pointer variable base *ptr then will a additional virtual table be created? 2 virtual tables one for ptr and another for d?

No. As Torsten said, you will only get a new virtual table with a new object.


When you call the print() method on an object of type "derived" then you want the derived::print() method to be called, no matter what kind of compatible pointer you are using.

You can think of a virtual table as a form of indirection. When a virtual table is present then the code will look inside the virtual table to find where this object's version of the method is, and then it will call the resulting pointer. Having a virtual table lets an object say, "here is my own implementation of these methods".

If not for the virtual table then a pointer of type base* would always find the base::print() method, even if the object is of type "derived". Calling a method on an object without a virtual table just goes to some fixed offset from the start of the object to find the method.

Regards,
Paul Gearon

Software Engineer
Tucana Technologies
http://www.tucanatech.com

Catapultam habeo. Nisi pecuniam omnem mihi dabis, ad caput tuum saxum
immane mittam.
(Translation from latin: "I have a catapult. Give me all the money,
or I will fling an enormous rock at your head.")