我的情况与下面类似(代码不准确,只是为了阐明我的意思)。当我打电话给D.A()
时,我希望打印"Desc"
一词,但会打印"Base"
。
class Base {
public:
void A() { B(); }
virtual void B() { cout << "Base"; }
}
class Descendant : public Base {
public:
virtual void B() overriden { cout << "Desc"; }
}
main () {
Descendant D;
D.A();
}
在这里一定缺少一些概念性的东西。 D.A()
是否应打印"Desc"
?如果没有,为什么?
答案 0 :(得分:1)
该问题有一个重要错误。方法A实际上是Base类的构造函数。而且有意义的是,构造函数不能调用派生类的任何方法(甚至是虚拟方法),因为这些派生类还不存在。
当A是非ctor时,它会按预期工作。