Si consideri il seguente programma C++.


#include <iostream.h>


class B
{public:
 virtual void A() { cout << "B::A()\n"; }
 virtual void H() { cout << "B::H()\n"; }
};


class D1: public B
{public:
 void A() { H(); }
};


class D2: public B
{public:
 void H() { A(); }
};


void F(B& b1, B b2)
{ b1.A(); b2.H(); }


main()
{  B b; D1 d1; D2 d2;
  F(d1,d2);   F(d2,d1);   F(b,d1);   F(d1,b);   F(b,d2);   F(d2,b);
}


Dire se il compilatore compilerebbe senza errori il programma oppure no, e in
caso affermativo, descrivere l'effetto di ciascuna chiamata della funzione F()
che appare in main(), motivando adeguatamente le risposte. 

----------------------------------------------------------------------------

SOLUZIONE


B::H()
B::H()
B::A()
B::H()
B::A()
B::H()
B::H()
B::H()
B::A()
B::H()
B::A()
B::H()
