Dlaczego tak
Metoda f() nie jest wirtualna, więc wybór wersji odbywa się w czasie kompilacji na podstawie typu wskaźnika A* i wywołana zostaje A::f(), która wypisuje „A”. Metoda g() jest wirtualna, więc o wyborze decyduje rzeczywisty typ obiektu B i wypisane zostaje „b”. Odpowiedź Bb zakłada, że wszystkie metody w C++ są wirtualne, jak w Javie — dlatego metodę, którą klasy pochodne mają nadpisywać, trzeba oznaczyć słowem virtual.