让我们假设Visual C 2010中的这种情况:
#include
#include
using namespace std;
class Base
{
public:
int b;
void Display()
{
cout<
};
virtual void vDisplay()
{
cout<
};
};
class Derived : public Base
{
public:
int d;
void Display()
{
cout<
};
virtual void vDisplay()
{
cout<
};
};
int main()
{
Base ba;
Derived de;
ba.Display();
ba.vDisplay();
de.Display();
de.vDisplay();
_getch();
return 0;
};
从理论上讲,这个小应用程序的输出应该是:
基础:非虚拟显示 .
Base:虚拟显示 .
Base: Non-virtual display.
派生:虚拟显示 .
因为Base类的Display方法不是虚方法,所以Derived类不能覆盖它 . 对?
问题是当我运行应用程序时,它会打印出来:
基础:非虚拟显示 .
Base:虚拟显示 .
Derived: Non-virtual display.
派生:虚拟显示 .
所以要么我不理解虚拟方法的概念,要么在Visual C中发生奇怪的事情 .
有人可以帮我解释一下吗?