构造函数中的C+虚拟函数

构造函数中的C+虚拟函数

下面的示例为什么打印“0”,以及必须更改哪些内容才能像我所期望的那样打印“1”?

#include <iostream>struct base {
   virtual const int value() const {
      return 0;
   }
   base() {
      std::cout << value() << std::endl;
   }
   virtual ~base() {}};struct derived : public base {
   virtual const int value() const {
      return 1;
   }};int main(void) {
   derived example;}


阿晨1998
浏览 291回答 3
3回答

慕哥6287543

因为base是先构造的,还没有“成熟”成derived现在还没有。当不能保证对象已经正确初始化时,它不能调用对象上的方法。

侃侃无极

在构造派生对象时,在调用派生类构造函数的主体之前,基类构造函数必须完成。在调用派生类构造函数之前,正在构造的对象的动态类型是基类实例,而不是派生类实例。因此,当从构造函数调用虚拟函数时,只能调用基类虚拟函数重写。
打开App,查看更多内容
随时随地看视频慕课网APP