#include <cstdio>

class Animal
{
	protected: int _generation = 0;
	
	public: Animal() : Animal(1) {		
	}
	
	public: Animal(int generation) {
		_generation = generation;
	}
	
	public: virtual Animal* spawn()
	{
		puts("Spawn From Animal");
		return new Animal(_generation + 1);
	}
};

class Dog : public Animal
{
	public: Dog() : Dog(1) {		
	}
	
	public: Dog(int generation) {
		_generation = generation;
	}

	public: virtual Dog* spawn()
	{
		puts("Spawn From Dog");
		return new Dog(_generation + 1);
	}
};

int main()
{
	Animal* a = new Dog();
	Animal* x = a->spawn();

	Dog* b = new Dog();
	Dog* y = b->spawn();

	return 0;
}