I need some answers to basic questions. I’m lost again. 🙁
q1 – Is this statement valid:
Whenever we define the function to be pure virtual function,
this means that function has no body.
q2 – And what is the concept of Dynamic Binding? I mean if the Compiler optimizes the code using VTABLEs and VPTRs then how is it Run-Time Polymorphism?
q3 – What are VTABLES AND VPTRs and how do their sizes change?
q4 – Please see this code:
class base
{
public:
virtual void display()
{
cout<<"Displaying from base";
}
};
class derived:public base
{
public:
void display(){cout<<"\nDisplaying from derived";}
};
int main()
{
base b,*bptr;
derived d;
bptr=&b;
bptr->display();
bptr=&d;
bptr->display();
}
Output:
Displaying from base
Displaying from derieved
Please can somebody answer why a pointer of base class can point the member function of a derived class and the vice-versa is not possible, why ?
False. It just means any derived classes must implement said function. You can still provide a definition for the function, and it can be called by
Base::Function().*Virtual tables are a way of implementing virtual functions. (The standard doesn’t mandate this is the method, though.) When making a polymorphic call, the compiler will look up the function in the function table and call that one, enabling run-time binding. (The table is generated at compile time.)
See above. Their sizes change as there are more virtual functions. However, instances don’t store a table but rather a pointer to the table, so class size only has a single size increase.
Sounds like you need a book.
*A classic example of this is here:
This wouldn’t be an abstract class without a pure virtual function, but a destructor requires a definition (since it will be called when derived classes destruct.)