我希望标题不会混淆。我试图理解下面的问题,这是由于在C++中定义一个虚拟类的方法而引起的。想象我有一个基类A和派生类B,使得编译时和运行时虚拟和非虚函数(C++)
class A {
public:
void print() { cout << "A"; }
}
class B : A {
public:
void print() { cout << "B"; }
}
如果我知道执行下面的代码,所述打印命令将打印出“A”。
A *a = new A();
B *b = new B();
((A *)b)->print(); // this prints "A"
然而,如果我声明这两类虚拟“打印”的方法,我反而看到“B”在我的屏幕打印。为什么这发生了?
你能澄清一下问题:“为什么这是完全发生?”您是否要求在标准中指定语言的指定位置,或者您要求“什么是虚拟桌面,在典型的实现中它是如何工作的” –
@ChrisBeck我知道问题的答案是,如果方法不是虚拟的,那么调用的方法“取决于编译时使用的类型”,而如果方法是虚拟的,那么“对象的运行时类型”决定调用哪个定义。这是我没有得到的。 – Adam
可能的重复[为什么我们需要C++中的虚拟方法?](http://stackoverflow.com/questions/2391679/why-do-we-need-virtual-methods-in-c) –