
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Pure Virtual Functions and Abstract Classes in C++
C++ Pure Virtual Functions
A pure virtual function in C++ is a virtual function that has no definition in the base class and must be overridden in derived classes. It is declared by assigning = 0 in its declaration.
Syntax
Following is the syntax of the pure virtual function:
class Shape { public: virtual double area() = 0; };
C++ Abstract Class
A class that contains at least one pure virtual function is called an abstract class. Abstract classes cannot instantiated directly; instead, they work as a blueprint of the derived class.
Any class inheriting from an abstract class must provide an implementation for all pure virtual functions it inherits unless it too is declared abstract.
-
Abstract class can have normal functions and variables along with a pure virtual function.
-
Abstract classes are mainly used for Upcasting, so that its derived classes can use its interface.
-
If an Abstract Class has derived class, they must implement all pure virtual functions, or else they will become Abstract too.
-
We can't create object of abstract class as we reserve a slot for a pure virtual function in Vtable, but we don't put any address, so Vtable will remain incomplete.
Example: Runtime Polymorphism using a Pure Virtual Function
This example implements runtime polymorphism using a pure virtual function and dynamic binding:
#include<iostream> using namespace std; class B { public: virtual void s() = 0; }; class D:public B { public: void s() { cout << "Virtual Function in Derived class\n"; } }; int main() { B *b; D dobj; b = &dobj; b->s(); }
The above code generates the following output:
Virtual Function in Derived class
Example: Abstract Class with a Pure Virtual Function
In this example, we implement an abstract class with a pure virtual function:
#include <iostream> using namespace std; class Shape { public: virtual void draw() = 0; }; class Circle: public Shape { public: void draw() override { cout << "Drawing a Circle" << endl; } }; class Rectangle: public Shape { public: void draw() override { cout << "Drawing a Rectangle" << endl; } }; int main() { Shape * shape1; Circle circleObj; Rectangle rectObj; shape1 = & circleObj; shape1 -> draw(); shape1 = & rectObj; shape1 -> draw(); return 0; }
Following is the output of the above code:
Drawing a Circle Drawing a Rectangle