Abstract Classes
Pure virtual functions and interfaces
Interview Relevant: Design patterns foundation
Abstract Classes
Classes with pure virtual functions that cannot be instantiated.
Code Examples
Abstract classes and interfaces.
cpp
1// Abstract class (has pure virtual function)
2class Shape {
3public:
4 // Pure virtual function (= 0)
5 virtual double area() const = 0;
6 virtual double perimeter() const = 0;
7
8 // Can have concrete methods too
9 void describe() {
10 cout << "Area: " << area() << endl;
11 }
12
13 virtual ~Shape() = default;
14};
15
16// Shape s; // Error! Cannot instantiate abstract class
17
18// Concrete derived class
19class Circle : public Shape {
20 double radius;
21public:
22 Circle(double r) : radius(r) {}
23
24 // Must implement all pure virtual functions
25 double area() const override {
26 return 3.14159 * radius * radius;
27 }
28
29 double perimeter() const override {
30 return 2 * 3.14159 * radius;
31 }
32};
33
34// Interface pattern (all pure virtual)
35class Drawable {
36public:
37 virtual void draw() = 0;
38 virtual ~Drawable() = default;
39};
40
41class Printable {
42public:
43 virtual void print() = 0;
44 virtual ~Printable() = default;
45};
46
47// Implement multiple interfaces
48class Document : public Drawable, public Printable {
49 void draw() override { /* ... */ }
50 void print() override { /* ... */ }
51};