【问题标题】:Issues with calling child method in parent's class in C++在 C++ 的父类中调用子方法的问题
【发布时间】:2015-07-04 16:54:44
【问题描述】:

我有一个基类和一个子类。在基类内部有一个名为constructionDebugInfo() 的虚函数,它在基类的构造函数末尾被调用。

我正在尝试在基类被实例化或子类被实例化时打印出不同的调试消息。不过,每次我只得到基类的constructionDebugInfo() 消息。发生这种情况有什么原因吗?

【问题讨论】:

  • " 出现这种情况是有原因的吗?" 可能是因为函数不是virtual
  • constructionDebugIfno() 在基类中是虚拟的。
  • 发生这种情况是因为您尚未发布 SSCCE。
  • Meyer 在 Effective C++ 中的提示之一不是“不要在构造函数或析构函数中调用虚函数”吗?

标签: c++ constructor virtual


【解决方案1】:

在基类构造函数执行过程中,对象并不知道自己最终会成为派生类的对象。这就是为什么调用基类中的函数而不是派生类中的函数的原因。

【讨论】:

  • 那么就不可能做到这一点吗?
  • 正确。你必须找到其他方法来做你想做的事情。
  • @Benjamin “那么这是不可能实现的吗?” 不是真的不可能。如果基类知道子类(例如作为模板参数给出),则可以使用static_cast<Child*>(this)->constructionDebugInfo();,但您需要注意不要从子类访问任何未初始化的内容。
猜你喜欢
  • 2016-02-14
  • 1970-01-01
  • 2022-07-07
  • 2012-01-21
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2011-09-04
  • 2015-10-11
相关资源
最近更新 更多