Funciones virtuales: iterando sobre un vector <Clase base> que se rellena con objetos de subclase

Breve descripción
Estoy iterando sobre un vector que llama a una función virtual en cada objeto en el vector para ejecutar una secuencia de acciones. El vector es de la clase base como lo es el iterador. Todos los objetos son niños. Cuando se llama a la función virtual, ejecuta la función de la clase base.

(Realmente) Descripción larga: Estoy intentando modelar una criatura que tiene un conjunto de comportamientos. Mi clase base es abstracta con solo dos funciones (virtual) que todas las subclases han anulado:

class Behavior
{
public:
     Behavior();
    ~Behavior(void){}
 virtual void execute(){} 
 virtual BEHAVIOR_TYPE getType() {return m_Type;}


protected:
BEHAVIOR_TYPE m_Type;
};

He creado una serie de comportamientos infantiles, como mover, consumir, explorar, etc.

class Move :
    public Behavior
{
public:
BEHAVIOR_TYPE getType() {return m_Type;}
    enum Direction {N, NE, E, SE, S, SW, W, NW};
Move(DOCO * d);
~Move(void);
void execute() ;
    Direction chooseDirection();
    void setDirection(Direction newDirection);
private:
    Direction m_Direction;
    DOCO *I;
BEHAVIOR_TYPE m_Type;

};

Creé un vector en el que introduje instancias de cada subclase de comportamiento, así como un iterador para recorrerlo:

vector<Behavior> m_Behavior;
vector<Behavior>::iterator bIt;

Cuando la criatura obtiene una secuencia de acción, trato de iterar sobre el vector, desreferenciar el iterador y llamar a la función de ejecución:

void World::justDoIt()
{
    for(dIt=myDOCO.begin(); dIt!=myDOCO.end(); ++dIt)
{
    vector<Behavior>::iterator myBehavior=(dIt)->getFirstBehavior();
    vector<Behavior>::iterator end=(dIt)->getLastBehavior();
    for(myBehavior; myBehavior!=end; ++myBehavior)

        (*myBehavior).execute();
}
}

l problema es que ejecuta la función del padre en lugar de la función del niño.

Según tengo entendido, el enlace tardío debería llamar automáticamente a la función apropiada en función del tipo de objeto que lo estaba llamando en lugar del tipo de puntero con el que se llamó, y en mi código anticipé que apuntaría al objeto hijo .

Obviamente, he cometido un error y de alguna manera le dije al programa que quiero que se traten como padres en lugar de hijos, pero no puedo encontrar mi error.

Un segundo síntoma es que no me permitirá hacer que los padres funcionen puramente virtuales, porque dice que no puede crear una instancia de una clase abstracta. No lo estoy creando de manera explícita en ninguna parte de mi código, pero debe haber algún lugar donde lo esté haciendo implícitamente. Sin embargo, no puedo encontrar dónde. Ciertamente, la creación de un vector para contener objetos de la clase principal no requiere la creación de instancias del principal, y esa es la única vez que hago referencia directa a la clase principal.

Cualquier ayuda sería muy apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta