/*Homework #3. Virtual functions in case of multiple inheritance.*/
/*     Roman V. ShapovAlov. CM&C-210. overrider@cmcspec.ru       */

#include <iostream>

using namespace std;

class A{
public:	virtual void f () {cout<<"A::f()"<<endl;}
	void g () {cout<<"A::g()"<<endl;}
};

class B{
public:	virtual void f () {cout<<"B::f()"<<endl;}
};

class AB: public A, public B{
public:	void g () {cout<<"AB::f()"<<endl;}
};

class ABson: public AB{
public:	void f () {cout<<"ABson::f()"<<endl;}
};

int main (){
	AB ab;
	//ab.f(); ambiguity
	ab.g();
	AB *pab = new AB();
	//pab->f();  ambiguity
	pab->g();
	A *pa = new A();
	pa->f();
	ABson *pabs = new ABson();
	pabs->f(); 
	pab = pabs;
	pab->f();
	return 0;
}
