The idea of virtual methods is that they can run the child's methods from a pointer to the parent.
Code:
#include <iostream>
#include <vector>
using namespace std;
class Drawable {
public:
virtual void draw() const = 0;
virtual ~Drawable() { cout << "Drawable dtor\n"; }
};
class DrawableA : public Drawable {
public:
void draw() const { cout << "DrawableA draw\n"; }
~DrawableA() { cout << "DrawableA dtor\n"; }
};
class DrawableB : public Drawable {
public:
void draw() const { cout << "DrawableB draw\n"; }
~DrawableB() { cout << "DrawableB dtor\n"; }
};
int main() {
vector<Drawable*> v {
new DrawableA,
new DrawableB,
new DrawableB,
new DrawableA
};
for (const Drawable* d: v)
d->draw();
for (Drawable* d: v)
delete d;
}
Code:
$ g++ -std=c++11 drawable.cpp
$ ./a.out
DrawableA draw
DrawableB draw
DrawableB draw
DrawableA draw
DrawableA dtor
Drawable dtor
DrawableB dtor
Drawable dtor
DrawableB dtor
Drawable dtor
DrawableA dtor
Drawable dtor