#include <iostream>

using namespace std;

class DoSomething
{
	public:
	virtual void unko() = 0;
};

class Humanoid
{
	public:
	virtual void say() = 0;
};

class Human : public Humanoid, public DoSomething
{
	public:
		void unko(){
			_unko();
		}
		void say(){ unko(); }
	private:
		virtual void _unko(){
			cout << "Ya-Hoo!!!!!!!!!!!!" << endl;
		}
};

class Woman : public Human
{
	public:
	private:
		virtual void _unko(){
			cout << "Iyaaaaaaaa!!!!!!!!" << endl;
		}
};

class BeautifulGirl : public Humanoid
{
	public:
		void say(){ cout << "I love you." << endl;}

};

int main()
{
	Human a;
	Woman b;
	BeautifulGirl c;
	Humanoid *tmps[] = { &a, &b, &c };
	for(int i=0; i<3; i++){ tmps[i]->say(); }
	//c.unko(); // !error
	return 0;
}