What is an Abstract Class?
An abstract class in C++ is a class that contains at least one pure virtual function.
It cannot be instantiated directly, meaning you cannot create objects of an abstract class.
An abstract class serves as a base class and is meant to be inherited by other classes that will implement its pure virtual functions.
๐ Syntax of Abstract Class
cppCopyEditclass AbstractClass {
public:
virtual void display() = 0; // pure virtual function
};
Any class with = 0
in a virtual function becomes an abstract class.
๐ง Real-Life Analogy
Imagine you have an abstract class called “Shape”.
You can’t draw “Shape” directly, but you can draw a Circle, Rectangle, or Triangle โ each of which is a specific implementation of that abstract shape.
โ๏ธ Example of Abstract Class in C++
#include <iostream>
using namespace std;
class Shape {
public:
virtual void draw() = 0; // Pure virtual function
};
class Circle : public Shape {
public:
void draw() override {
cout << "Drawing Circle" << endl;
}
};
class Rectangle : public Shape {
public:
void draw() override {
cout << "Drawing Rectangle" << endl;
}
};
int main() {
Shape* s1 = new Circle();
Shape* s2 = new Rectangle();
s1->draw(); // Output: Drawing Circle
s2->draw(); // Output: Drawing Rectangle
delete s1;
delete s2;
return 0;
}
๐ Key Points about Abstract Classes
Feature | Description |
---|---|
Has at least one pure virtual function | Yes (virtual func() = 0; ) |
Can be inherited | Yes |
Can have normal functions | Yes |
Can have data members | Yes |
Can create object directly | โ No (compilation error) |
Can have constructors/destructors | โ Yes |
๐งพ Why Use Abstract Classes?
- To define a common interface for a group of classes.
- To implement runtime polymorphism.
- To enforce that derived classes must implement specific behaviors.
- To support the concept of “interface” or “blueprint” in OOP.
โ What Happens If You Don’t Override the Pure Virtual Function?
If a derived class does not override all the pure virtual functions from the abstract class, it also becomes abstract, and you cannot create objects of it.
โ Example: Error on Instantiating Abstract Class
class Base {
public:
virtual void show() = 0;
};
int main() {
Base b; // โ Error: Cannot create object of abstract class
return 0;
}
๐ฏ Uses of Abstract Classes in Real Applications
- GUI applications: Abstract “Window”, “Button”, or “Event” classes
- File I/O operations: Abstract “FileHandler” class
- Games: Abstract “Character” or “Enemy” class
- Database systems: Abstract interface for query execution
โ Summary
Topic | Explanation |
---|---|
Abstract Class | A class with at least one pure virtual function |
Purpose | Acts as a base class for derived classes |
Object Creation | Not allowed |
Used for | Interfaces, enforcing behavior, runtime polymorphism |
Contains | Pure virtual functions, normal functions, and data members |