C ++为什么接口连接非虚拟类重写?

时间:2019-04-29 12:51:41

标签: c++ inheritance polymorphism

我想更好地了解virtual限定词如何在类族中传播。考虑以下代码:

struct Parent {
  void func() { cout << "Parent!" << endl; }
};

struct Child : Parent {
  void func() { cout << "Child!" << endl; }
};

int main() {  
  Parent* pc = new Child;
  pc->func(); // prints "Parent!"
}    

未调用Child的{​​{1}}替代项,因为func()函数不是Parent。很简单。

在下面的示例中,我向virtual添加了一个接口,但我不明白为什么添加该接口会限制从ParentParent::func()的调用,因为最后一个是从Child:func()指针。

Parent

我当时认为struct Interface { virtual void func() = 0; }; struct Parent : Interface { void func() { cout << "Parent!" << endl; } }; struct Child : Parent { void func() { cout << "Child!" << endl; } }; int main() { Parent* pc = new Child; pc->func(); // prints "Child!" } 的构建应按以下顺序进行:

  1. new Child的构造,声明了一个纯虚拟Interface
  2. func()被构造,并覆盖Parent(我认为在这一点上,抽象构造将是“满意”和“完成”)
  3. func()被构造,声明它是自己的Child实现

0 个答案:

没有答案