Pure Virtual Function & Abstract Base Class
- If we want to provide only interface for the derived class then we use the concept of abstract base class.
- If we create abstract base class then we can not create object of that base class.
- Writing pure virtual function means writing (=0) at the end of a prototype of a function without any defination.
- When we write at least a single pure virtual function inside the class then that class is considered as a abstract base class.
- A class having pure virtual function only says what to do does not say how to do.
- When we inherit that abstract base class then the derived class must implement the pure virtual functions are itself became an abstract class. Means a pure virtual function forces inherited classes to provide a definition for it.
- We can create an abstract class when only want to manipulate a set of classes through a common interface,but the common interface doesn’t need to have an implementation.
- We can create pure virtual function using the syntax as virtual int Fun() = 0;
- By using the above syntax we can tell the compiler that reserve the slot for this function in VTABLE, but not to put any address in that perticular slot.
- Because of which the VTABLE is incomplete. Even if only one function in class is declared as a pure virtual the VTABLE is incomplete.
- When we create object of abstract base class, the VTABLE is incomplete and by looking at it compiler gives an error message.
- It’s possible to provide a definition for a pure virtual function in the base class. But still it is not allowed to create the object of abstract class. and in this case also VTABLE is also incomplete.
- We can not provide the inline definition for the pure virtual functions means we can not provide the definition for the pure virtual function inside the class.
- If a class is deriving an abstract class, it is compulsion that the given derived class must provide a defination of a pure virtual function which is defined in the abstract base class.
- If derived class does not want to provide a defination of pure virtual function then writing a prototype of a function is necessary (=0 must be there at the end of the prototype).
- If there is no such a prototype in a derived class then compiler gives an error.
- By providing the definition for the pure virtual functions we can call that function inside the derived class functions.
- We can also provide a partial defination for pure virtual function but still entry of VTABLE is empty.
- If we want to provide such partial defination then that function must be defined outside the class.
- And this partially provided defination must be called by a derived class otherwise this defination is of no use.
Example:
class base
{
public:
virtual void demo()=0;
};
void base:: demo()
{
printf(“in pure virtual function”);
}
class derived : public base {
public:
void demo()
{
base::demo();
printf(“Inside the derived class\n”);
}
};
int main()
{
derived obj;
base *d = &obj;
d->demo();
return 0;
}
Output:
in pure virtual function.
Inside the derived class.
For more reading about technology news in singapore and seo to online marketing do view more about other pages.