C++ – Pure Virtual Functions and Abstract Classes

Pure Virtual Functions and Abstract Classes

A pure virtual function is a virtual function in C++ for which we need not write any function definition and only have to declare it, where it is declared by assigning 0 in the declaration. To declare a virtual function, use the “virtual” keyword. 

Whereas, an abstract class is a class in C++ which have at least one pure virtual function.

Syntax

virtual return_type func_name(parameters)=0;

Where

  • return_type is the return type of the function (e.g., int, void, etc.)
  • func_name is the name of the function.
  • parameters is the list of parameters the function.
  • = 0 syntax indicates that the function is pure virtual, which has no definition in the base class.

Example of Pure Virtual Function

classShape{public:// Pure virtual functionvirtualvoiddraw()=0;};

Example of Abstract Class

An abstract class is a class that contains at least one pure virtual function.

classShape{public:virtualvoiddraw()=0;// Pure virtual function makes Shape an abstract classvirtual~Shape(){}// Virtual destructor (good practice)};

Example of Pure Virtual Functions and Abstract Classes

Here is the full example showcasing the working of it.

#include<iostream>usingnamespace std;// Abstract classclassShape{public:virtualvoiddraw()=0;// Pure virtual functionvirtual~Shape(){}// Virtual destructor};// Derived class: CircleclassCircle:public Shape{public:voiddraw()override{
    cout <<"Drawing Circle"<< endl;}};// Derived class: RectangleclassRectangle:public Shape{public:voiddraw()override{
    cout <<"Drawing Rectangle"<< endl;}};// Derived class: TriangleclassTriangle:public Shape{public:voiddraw()override{
    cout <<"Drawing Triangle"<< endl;}};intmain(){
  Shape * shapes[]={newCircle(),newRectangle(),newTriangle()};// Draw all shapesfor(Shape * shape: shapes){
    shape ->draw();}// Cleanupfor(Shape * shape: shapes){delete shape;}return0;}

When the above code is compiled and executed, it produces the following result −

Drawing Circle
Drawing Rectangle
Drawing Triangle

Key Features of Abstract Classes

  • Abstract classes can have normal functions and variables too, along with a pure virtual function.
  • Abstract class cannot be instantiated, but pointers and references of Abstract class type can be created.
  • Abstract classes are mainly used for Upcasting so that their derived classes can use its interface.
  • If an Abstract Class has a derived class, it must implement all pure virtual functions, or else they will become Abstract too.
  • We cant create an object of abstract class as we reserve a slot for a pure virtual function in Vtable, but we dont put any address, so Vtable will remain incomplete.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *