#include <iostream>
using namespace std;
class Base
{
  public:
    virtual Base* clone() { return new Base(*this); }
    virtual void identify() {std::cout << "Base\n"; }
};

class Derived : public Base
{
  public:
    virtual Derived* clone() override { return new Derived(*this); }
    virtual void identify() override {std::cout << "Derived\n"; }
};

int main() 
{
	Base* foo = new Derived;
	Base* bar = foo->clone();
	bar->identify();
}