[LC++]virtual functions
Paul Gearon
gearon at ieee.org
Fri Oct 29 13:56:01 UTC 2004
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.")
More information about the tuxCPProgramming
mailing list