Asumamos este escenario en Visual C++ 2010:métodos no virtuales Sustitución
#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, la salida de esta pequeña aplicación debe 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 sobrescribirlo. ¿Derecha?
El problema es que cuando ejecuto la aplicación, se imprime la siguiente:
- Base: pantalla no virtual.
- Base: pantalla virtual.
- Derivado: Visualización 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?
tendría absolutamente __Base: visualización no virtual .__ al cambiar su línea a 'de.Base :: Display()'. –