class C {
 public:
   C() {}
   virtual ~C() {}
   virtual C* clone() const = 0;
}; // C

class B : public C {
 public:
   B(int i = 0) : n(i) {}
   virtual  ~B() {}
   B*       clone() const {return new B(*this);}
   int  n;
}; // B
