Inoltre sei subito capitato in uno dei problemi classici del C++ per quanto concerne le classi base: i binary methods.

codice:
Base* prova2(Base*);
Codice come questo comporta un sacco di problemi alle classi derivate per la gestione dei tipi. Evita questi metodi o implementali con un template.