Understanding Abstract Classes and Pure Virtual Functions in C++

Abstract Class

An abstract class serves as a foundation in C++ programming. It is designed to be a base class and must include at least one pure virtual function. The key characteristics are:

  • Base Class: An abstract class is always intended to be a base class in an inheritance hierarchy.
  • Pure Virtual Function: It must contain at least one pure virtual function, providing a blueprint for derived classes.

What is a Pure Virtual Function?

A pure virtual function is a unique feature in C++. It is a function without a body and is declared in the base class. Here's what you need to know:

  • Declaration: It is declared with the syntax virtual void virtualFunName() = 0;.
  • No Definition: The function is not defined in the base class; it's left to be implemented by the derived classes.
  • Override Requirement: A derived class must override the pure virtual function; otherwise, the compiler will raise an error.

Example

Let's take a practical example to illustrate abstract classes and pure virtual functions.

#include<iostream>
using namespace std;

class AbstractInterface {
public:
    virtual void numbers() = 0;  // Pure virtual function
    void input();
    int a, b;
};

void AbstractInterface::input() {
    cout << "Enter the numbers\n";
    cin >> a >> b;
}

class Add : public AbstractInterface {
public:
    void numbers() override {
        int sum = a + b;
        cout << "Sum is " << sum << "\n";
    }
};

class Subtract : public AbstractInterface {
public:
    void numbers() override {
        int diff = a - b;
        cout << "Difference is " << diff << "\n";
    }
};

int main() {
    Add obj1;
    obj1.input();
    obj1.numbers();

    Subtract obj2;
    obj2.input();
    obj2.numbers();

    return 0;
}

Output:

Enter the numbers
5
6
Sum is 11

Enter the numbers
5
6
Difference is -1

In this example, AbstractInterface is an abstract class with a pure virtual function numbers(). The Add and Subtract classes inherit from it, providing their own implementations for the pure virtual function.

Post a Comment

Previous Post Next Post