Nehmen wir dieses Szenario in Visual C ++ 2010 an:
#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;
};
Theoretisch sollte die Ausgabe dieser kleinen Anwendung sein:
- Basis: Nicht virtuelle Anzeige.
- Basis: Virtuelle Anzeige.
- Basis: Nicht virtuelle Anzeige.
- Abgeleitet: Virtuelle Anzeige.
Da die Anzeigemethode der Basisklasse keine virtuelle Methode ist, sollte die abgeleitete Klasse sie nicht überschreiben können. Richtig?
Das Problem ist, dass beim Ausführen der Anwendung Folgendes gedruckt wird:
- Basis: Nicht virtuelle Anzeige.
- Basis: Virtuelle Anzeige.
- Abgeleitet: Nicht virtuelle Anzeige.
- Abgeleitet: Virtuelle Anzeige.
Entweder habe ich das Konzept der virtuellen Methoden nicht verstanden oder in Visual C ++ passiert etwas Seltsames.
Könnte mir jemand mit einer Erklärung helfen?
de.Base::Display()
.