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

class Shape {public: // Pure virtual function virtual void draw() = 0; };

Example of Abstract Class

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

class Shape {public: virtual void draw() = 0; // Pure virtual function makes Shape an abstract class virtual ~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> using namespace std; // Abstract class class Shape { public: virtual void draw() = 0; // Pure virtual function virtual~Shape() {} // Virtual destructor }; // Derived class: Circle class Circle: public Shape { public: void draw() override { cout << "Drawing Circle" << endl; } }; // Derived class: Rectangle class Rectangle: public Shape { public: void draw() override { cout << "Drawing Rectangle" << endl; } }; // Derived class: Triangle class Triangle: public Shape { public: void draw() override { cout << "Drawing Triangle" << endl; } }; int main() { Shape * shapes[] = { new Circle(), new Rectangle(), new Triangle() }; // Draw all shapes for (Shape * shape: shapes) { shape -> draw(); } // Cleanup for (Shape * shape: shapes) { delete shape; } return 0; }

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.
Advertisements
close