Listing 1 A polymorphic hierarchy of shapes with a clone function
class shape { public: virtual shape *clone() const = 0; ... }; class circle : public shape { public: shape *clone() const; ... }; shape *circle::clone() const { return new circle(*this); } class rectangle : public shape { public: shape *clone() const; ... }; shape *rectangle::clone() const { return new rectangle(*this); }