CodeBlanks Logo Icon CodeBlanks

Abstract classes

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

main.cpp
#include <iostream>

// Define Drawable and Circle classes here

int main() {
    // Create a Circle via Drawable* and call draw
    return 0;
}

Sample solution

main.cpp
#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

Question
virtual void draw() = ____;
Answer
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?

main.cpp
???
  • 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.

All lessons in Intermediate