Supongamos 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;
};
En teoría, el resultado de esta pequeña aplicación debería ser:
- Base: pantalla no virtual.
- Base: Pantalla virtual.
- Base: pantalla no virtual.
- Derivado: Pantalla virtual.
Debido a que el método Display de la clase Base no es un método virtual, la clase Derived no debería poder anularlo. ¿Derecho?
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 ++.
¿Alguien podría ayudarme con una explicación?
de.Base::Display()
.