#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;
}