Anulando métodos no virtuales

Asumamos este escenario en Visual C ++ 2010:

#include <iostream>
#include <conio.h>

using namespace std;

class Base
{
public:
    int b;
    void Display()
    {
        cout<<"Base: Non-virtual display."<<endl;
    };
    virtual void vDisplay()
    {
        cout<<"Base: Virtual display."<<endl;
    };
};

class Derived : public Base
{
public:
    int d;
    void Display()
    {
        cout<<"Derived: Non-virtual display."<<endl;
    };
    virtual void vDisplay()
    {
        cout<<"Derived: Virtual display."<<endl;
    };
};

int main()
{
    Base ba;
    Derived de;

    ba.Display();
    ba.vDisplay();
    de.Display();
    de.vDisplay();

    _getch();
    return 0;
};

Teóricamente, la salida de esta pequeña aplicación debería ser:

Base: pantalla no virtual.Base: pantalla virtual.Base: pantalla no virtual.Derivado: pantalla virtual.

porque el método de visualización de la clase base no es un método virtual, por lo que la clase derivada no debería poder anularlo. ¿Derecha?

El problema es que cuando ejecuto la aplicación, imprime esto:

Base: pantalla no virtual.Base: pantalla virtual.Derivado: pantalla no virtual.Derivado: pantalla virtual.

Entonces, o no entendí el concepto de métodos virtuales o algo extraño sucede en Visual C ++.

¿Podría alguien ayudarme con una explicación?

Respuestas a la pregunta(3)

Su respuesta a la pregunta