#include <iostream>
using namespace std;

class A
{
  public:
    virtual void m1(void) = 0;
    void m2(void) { }
    virtual ~A(void) { cout << "A::~A(void)" << endl; }
};

class B : public A
{
  public:
    virtual void m1(void) { cout << "B::m1(void)" << endl; }
    ~B(void) { cout << "B::~B(void)" << endl; }
};

class Drawable
{
  public:
    virtual void draw(void) = 0;
    ...
};

Drawable *shapes[100];

for (int i = 0; i < 100; ++i) shapes[i]->draw();

int main(void)
{
  A *pA = new A;
  delete pA;
  return 0;
}
