#include <iostream>

class Base
{
public:
  Base()                { std::cout << "Base defCtor"  << std::endl; }
  Base(const Base& rhs) { std::cout << "Base copyCotr" << std::endl; }
  virtual Base* clone() { return new Base(*this); }
};

class Derived : public Base
{
public:
  Derived()                   { std::cout << "Derived defCtor"  << std::endl; }
  Derived(const Derived& rhs) : Base(rhs)
                              { std::cout << "Derived copyCotr" << std::endl; }
  virtual Derived* clone()    { return new Derived(*this); }
};

int main()
{
  Base *bp = new Derived;
  Base *bq = bp->clone();
  return 0;
}