>> //Памяти выделили размером A,
не правда
//да еще и B::virt на которую ссылается
//vtable x стал закрытым,
//т.е. x->virt(); не будет работать.
что написали то и получили... в классе A должен был бы быть метод в роде этого:
C++ (Qt)
void A::callVirt()
{ virt(); }
Как интерпретировать мозгом A* x = new B ?
//.............
Правил что-то много получается.
Ответ 1... разбираться в с++ в частности и в ООП в общем.