Problema que anula la función virtual

De acuerdo, estoy escribiendo un juego que tiene un vector de una clase pairent (enemigo) que se llenará con clases para niños (goomba, koopa, boss1) y necesito que sea así cuando llame a actualizar, llama a las clases infantiles actualización respectiva He logrado crear un ejemplo de mi 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){}
}

Salida deseada: "Hola desde B" Salida obtenida: "Hola desde A"

¿Cómo consigo que llame a la función de impresión de B?

Respuestas a la pregunta(3)

Su respuesta a la pregunta