#include<iostream>
#include<cstdlib>

class Ave {
	public:
		virtual void volar(void) = 0;
		virtual void comer(void) = 0;
};

class Aguila : public Ave {
	public:
		virtual void volar(void);
		virtual void comer(void);
};

void Aguila::volar(void)
{
	std::cout << "me subo a la montaña y desde ahì vuelo\n";
}

void Aguila::comer(void)
{
	std::cout << "voy a buscar un conejo y me lo como\n";
}

class Gallina : public Ave {
	public:
		virtual void volar(void);
		virtual void comer(void);
};

void Gallina::volar(void)
{
	std::cout << "no vuelo, solo doy saltos grandes y aleteo\n";
}

void Gallina::comer(void)
{
	std::cout << "voy a buscar granos de maíz y me los como\n";
}

class Pato : public Ave {
	public:
		virtual void volar(void);
		virtual void comer(void);
};

void Pato::volar(void)
{
	std::cout << "vuelo en bandadas hacia Canadá\n";
}

void Pato::comer(void)
{
	std::cout << "voy al lago a buscar un pez y me lo como\n";
}

int main(int argc, char *argv[])
{
	Ave*  p;
	int x;
	while (true) {
		std::cout << "1) Pato\n"
				"2) Gallina\n"
				"3) Aguila\n"
				"otro valor para salir...\n";
		std::cin >> x;
		switch (x) {
			case 1: p= new Pato;
					break;
			case 2: p= new Gallina;
					break;
			case 3: p= new Aguila;
					break;
			default: return EXIT_SUCCESS;
		}
		std::cout << "a volar\n";
		p->volar();
	
		std::cout << "a comer\n";
		p->comer();

		delete p;	
		std::cout << "--------------------\n";
	}

	return EXIT_SUCCESS;
}




















