Stiamo parlando di qualcosa del genere?

codice:
//*********************** PRIMO PASSO
 class Shape {
 public:
   ...
   virtual Shape* clone() const = 0;   // The Virtual (Copy) Constructor
   ...
 }; 
//********************* SECONDO PASSO
 class Circle : public Shape {
 public:
   ...
   virtual Circle* clone() const;
   ...
 };
//********************* TERZP PASSO
 
 Circle* Circle::clone() const
 {
   return new Circle(*this);
 }
Dimmi se ho capito bene, in shape dichiara il metodo virtuale "clone()", poi crea la classe Circle come figlia di Shape e dichiara il metodo virtuale clone() che poi sviluppa alla fine?

Non riesco però a capire tutto quel giro di puntatori. Riusciresti a produrmi un esempio un minimo più semplice? (magari quello dell'ordinamento lo è, ripeto sempre se non ti ruba troppo tempo)