#include <iostream>
#include <string>

using namespace std;

class Animal
{
public:
	virtual string say() = 0; // { return "something"; }
	virtual string eat() = 0; // { return "something"; }
	virtual string name() = 0; // { return "something"; }
};

class Dog : public Animal
{
public:
	string say() { return "Wang~"; }
	string eat() { return "Bones"; }
	string name() { return "Dog"; }
};

class Shark : public Animal
{
public:
	string say() { return "..."; }
	string eat() { return "Fish"; }
	string name() { return "Shark"; }
};

class Lion : public Animal
{
public:
	string say() { return "Uhhung~"; }
	string eat() { return "Animals"; }
	string name() { return "Lion"; }
};

void describe( Animal &an ) {
	cout << an.name() << " eats " << an.eat() << endl;
}

int main()
{
	//Animal an;
	Dog zong;
	Shark jaws;
	Lion king;

	Dog &dr = zong;
	cout << dr.name() << " eats " << dr.eat() << endl;
	Animal &ar = zong;
	cout << ar.name() << " eats " << ar.eat() << endl;

	describe(zong);
	describe(jaws);
	describe(king);

	system("pause");
	
}