Here is the program on vtables. Am I understanding is correct on vtables and v-pointers.
Class B
{
public:
virtual Void Hello()
{
cout<<"Hello Base";
}
};
class D: public B
{
public:
virtual void Hello()
{
cout<<"Hello Derived";
}
};
int main(int argc, char* argv[])
{
D *d1 = new D();
D *d2 = new D();
D *d3 = new D();
return 0;
}
In my opinion, there will be two vtables and only one vptr. Am I correct on it?
The standard does not define how virtual functions are actually implemented, only how they should behave. So what you are asking for entirely depends on the compiler you are using.
GCC will in theory most likely create two vtables (one for B
and one for D
) and three vptrs (one for each of the object instances d1
, d2
, d3
).
Have a look here: http://en.wikipedia.org/wiki/Virtual_method_table