为什么在C ++中一次调用基本方法

时间:2019-05-11 21:11:18

标签: c++ inheritance override

我的情况与下面类似(代码不准确,只是为了阐明我的意思)。当我打电话给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"?如果没有,为什么?

1 个答案:

答案 0 :(得分:1)

该问题有一个重要错误。方法A实际上是Base类的构造函数。而且有意义的是,构造函数不能调用派生类的任何方法(甚至是虚拟方法),因为这些派生类还不存在。

当A是非ctor时,它会按预期工作。