Pure Virtual Function & Abstract Class in C++

 


1️⃣ What is a Pure Virtual Function?

A pure virtual function is a virtual function in a base class that has no definition and must be overridden in derived classes.

🔹 Syntax

virtual void functionName() = 0;  // Pure virtual function

✅ The = 0 at the end makes it a pure virtual function.
✅ A class with at least one pure virtual function is called an abstract class.


2️⃣ What is an Abstract Class?

An abstract class in C++ is a class that cannot be instantiated and serves as a blueprint for derived classes.
It contains at least one pure virtual function.

✔ Used for inheritance and polymorphism.
Forces derived classes to implement specific functions.


3️⃣ Example: Abstract Class with a Pure Virtual Function

#include <iostream>
using namespace std;

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

class Circle : public Shape {
public:
    void draw() override {  // Implementing the pure virtual function
        cout << "Drawing Circle" << endl;
    }
};

class Rectangle : public Shape {
public:
    void draw() override {  // Implementing the pure virtual function
        cout << "Drawing Rectangle" << endl;
    }
};

int main() {
    Shape* s1 = new Circle();   // Base class pointer
    Shape* s2 = new Rectangle();

    s1->draw();  // Calls Circle's draw() function
    s2->draw();  // Calls Rectangle's draw() function

    delete s1;
    delete s2;

    return 0;
}

🔹 Output

Drawing Circle
Drawing Rectangle

Why use an abstract class?
Prevents direct object creation of Shape.
Forces all derived classes to implement draw().


4️⃣ Example: Real-World Use Case (Bank Account System)

#include <iostream>
using namespace std;

class BankAccount {  // Abstract class
public:
    virtual void accountType() = 0;  // Pure virtual function
};

class SavingsAccount : public BankAccount {
public:
    void accountType() override {
        cout << "This is a Savings Account" << endl;
    }
};

class CurrentAccount : public BankAccount {
public:
    void accountType() override {
        cout << "This is a Current Account" << endl;
    }
};

int main() {
    BankAccount* acc1 = new SavingsAccount();
    BankAccount* acc2 = new CurrentAccount();

    acc1->accountType();  // Calls SavingsAccount function
    acc2->accountType();  // Calls CurrentAccount function

    delete acc1;
    delete acc2;

    return 0;
}

🔹 Output

This is a Savings Account
This is a Current Account

Encapsulation + Polymorphism in action!


5️⃣ Key Points About Pure Virtual Functions & Abstract Classes

✔ A pure virtual function is declared as = 0 in the base class.
✔ A class with at least one pure virtual function is called an abstract class.
Objects of abstract classes cannot be created.
Derived classes must override pure virtual functions.
✔ Used in interfaces and polymorphism.

Would you like an example with multiple levels of inheritance? 🚀

Post a Comment

0 Comments