#include <iostream>
using namespace std;
class Item
{
public:
virtual Item* clone() = 0;
virtual ~Item() {}
};
class Ingredient : public Item
{
public:
Ingredient()
{
std::cout<<"Hi\n";
}
Ingredient(const Ingredient &other)
{
std::cout<<"Copied\n";
}
virtual Ingredient* clone() override
{
return new Ingredient(*this);
}
};
int main() {
Ingredient i;
Ingredient *j = i.clone();
delete j;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmNsYXNzIEl0ZW0KewoJcHVibGljOgoJCXZpcnR1YWwgSXRlbSogY2xvbmUoKSA9IDA7CgkJdmlydHVhbCB+SXRlbSgpIHt9Cn07CgoKY2xhc3MgSW5ncmVkaWVudCA6IHB1YmxpYyBJdGVtCnsKCXB1YmxpYzoKCQlJbmdyZWRpZW50KCkKCQl7CgkJCXN0ZDo6Y291dDw8IkhpXG4iOwoJCX0KCQkKCQlJbmdyZWRpZW50KGNvbnN0IEluZ3JlZGllbnQgJm90aGVyKQoJCXsKCQkJc3RkOjpjb3V0PDwiQ29waWVkXG4iOwoJCX0KCQoJCXZpcnR1YWwgSW5ncmVkaWVudCogY2xvbmUoKSBvdmVycmlkZQoJCXsKCQkJcmV0dXJuIG5ldyBJbmdyZWRpZW50KCp0aGlzKTsKCQl9Cn07CgppbnQgbWFpbigpIHsKCUluZ3JlZGllbnQgaTsKCQoJSW5ncmVkaWVudCAqaiA9IGkuY2xvbmUoKTsKCWRlbGV0ZSBqOwoJcmV0dXJuIDA7Cn0=