Abstract classes
- C++ course
- Intermediate
- Lesson 38/116
- 5 min
Learn abstract classes and pure virtual methods.
Abstract classes
An abstract class contains at least one pure virtual function, declared with = 0: virtual void draw() = 0;.
You cannot create an instance of an abstract class: Drawable d; gives a compile error. But a derived class that implements the pure virtual can be instantiated. class Circle : public Drawable { void draw() override { } }; is valid. Abstract classes define interfaces and force derived classes to implement specific methods.
Implementing pure virtual
A derived class that does not implement a pure virtual remains abstract. One that implements it becomes concrete and can be instantiated.
For example, if Drawable has virtual void draw() = 0;, both Circle and Square must implement it. Because Circle does, it is concrete; new Circle() is valid. This design guarantees at compile time which class does what.
Practice Drawable abstract class and Circle implementation
Define a Drawable abstract class with virtual void draw() = 0;. A Circle class inherits from Drawable; its void draw() override body is std::cout << "Circle";. In main write Drawable* d = new Circle();, call d->draw(); and delete d;.
Starter code
#include <iostream>
// Define Drawable and Circle classes here
int main() {
// Create a Circle via Drawable* and call draw
return 0;
}Sample solution
#include <iostream>
class Drawable {
public:
virtual void draw() = 0;
};
class Circle : public Drawable {
public:
void draw() override { std::cout << "Circle"; }
};
int main() {
Drawable* d = new Circle();
d->draw();
delete d;
return 0;
}Expected output
Circle
Questions and answers
Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.
1 Complete the pure virtual declaration
virtual void draw() = ____;
virtual void draw() = 0;
Explanation: = 0 makes the function pure virtual.
2 Match each piece to its meaning
| Term | Meaning |
|---|---|
= 0 |
Pure virtual |
Drawable |
Abstract class |
override |
Implementation |
new Circle() |
Concrete instance |
3 How is a pure virtual function declared?
???- static void draw();
- virtual void draw() { }
- void draw() virtual;
- virtual void draw() = 0; Correct answer
Explanation: = 0 makes the function pure virtual and the class abstract.