Here is a code snippet,
Code:
class A
{
public:
	virtual void draw(){cout<<"A"<<endl;}
};

class B
{
public:
	virtual void draw(){cout<<"B"<<endl;}
};

class A1 : public A
{
public:
	virtual void drawA() = 0;
	virtual void draw(){return drawA();}
};

class B1 : public B
{
public:
	virtual void drawB() = 0;
	virtual void draw(){return drawB();}
};


class D : public A1, public B1
{
public:
	virtual void drawA(){cout<<"drawA"<<endl;}
	virtual void drawB(){cout<<"drawB"<<endl;}
};

int main()
{
	D* pD = new D;

	A* pA = pD;
	pA->draw();
	delete pD;
	return 0;
}
Here pA->draw() will call drawA defined in D, why? How'd system know which function should be called, drawA or drawB?