A Vtable example ...

class Shape {
public:
virtual void draw() { int i=0; }
};

class Circle : public Shape {
public:
virtual void draw() { int i=0; }
};

class Rectangle : public Shape {
public:
virtual void draw() { int i=0; }
};

void drawShape( Shape *sp )
{
sp->draw();
}

int main()
{
Shape *sp1 = new Circle;
drawShape(sp1);
delete sp1;
sp1 = new Rectangle;
drawShape(sp1);

return 0;
}