Problema que substitui a função virtual

Ok, estou escrevendo um jogo que tem o vetor de uma classe emparelhada (inimiga) que será preenchida com classes de crianças (goomba, koopa, boss1) e preciso fazer isso quando chamo de atualização, chama as classes de crianças respectiva atualização. Consegui criar um exemplo do meu problema.

#include <stdio.h>
class A{
    public:
        virtual void print(){printf("Hello from A");}
};

class B : public A{
    public:
        void print(){printf("Hello from B");}
};


int main(){
    A ab = B();
    ab.print();
    while(true){}
}

Saída desejada: "Hello from B" Saída obtida: "Hello from A"

Como faço para chamar a função de impressão de B?

questionAnswers(3)

yourAnswerToTheQuestion