Adobe Interview Question
Software Engineer / DevelopersVirtual table is not created when constructor is called.. calls local version of the function
It does not really matter when the virtual table is created. Depending upon the version of the compiler, it could optimize the creation of the virtual table for a class before or after the constructor is called. It does not make sense to wait until the compiler sets up the object. Because then it is too late. Checkout the book on the C++ object model by Lippman
When Object is instantiated constructors are executed from top to bottom (Base to derived) in such case if base class constructor call virtual function it calls the base class version of that function only because base class constructor never knows that we are part of the bigger derived class. so the only implementation he can find is his own.
class Base
{
public:
Base()
{
Fun();
}
virtual void Fun( )
{
cout<<"\n I am in virtual function\n";
}
};
class Derived:public Base
{
public:
void Fun()
{
cout<<"\n I am in the Derived class";
Base::Fun( );
}
};
void main()
{
Derived d;
Base *b = &d;
}
Local version of the function is called
- Anonymous June 14, 2010