为什么在C 中覆盖了基本方法

Why is base method being called once overridden in C++

本文关键字:方法 覆盖 为什么      更新时间:2023-10-16

我的情况类似于下面的情况(代码不准确,只是为了确定我的观点(。当我致电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"打印?如果没有,为什么?

问题中存在重要的错误。方法A实际上是基类的构造函数。而且,由于这些派生的类还不存在,因此构造函数无法调用衍生类的任何方法(甚至虚拟(,这是有道理的。

当a是非ctor时,它可以按预期工作。