Re: Why does C++ refer VTable?
DKumar <dhananjay77@gmail.com> wrote in
news:b23a26ea-fba8-46d9-897d-17ce2d0c44a4@googlegroups.com:
class A{
virtual void f1(){}
};
class B : public A{
void f1(){}
};
int main()
{
A *pa = new B;
pa->f1();
}
In the above case, why compiler doesn't know which f1() I am trying to
call?
What you mean by "doesn't know"? In your example, neither f1() can be
called because both are private.
It has the address of B, so obviously it has to call B's f1().
B is a class, which is a compile-time entity, so there is no such thing as
"address of B". Now if you said instead "It has the address of an object of
type B", then the sentence would make sense. But now think how the code can
figure out the exact class if all it has got is an address of some
polymorphic object?
Why virtual table needed here to know which f1 needs to be called?
In the above simple code an optimizing compiler can indeed figure out the
actual class must always be B, and can skip the virtual lookup. But if this
holds for all calls of f1() in the program, then there was no need to
actually declare f1() virtual in the first place.
hth
Paavo