为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
犯罪嫌疑人X 2019-08-03 11:03:38
构造函数中的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;}
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

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



查看完整回答
反对 回复 2019-08-04
?
浮云间

TA贡献1829条经验 获得超4个赞

在构造派生对象时,在调用派生类构造函数的主体之前,基类构造函数必须完成。在调用派生类构造函数之前,正在构造的对象的动态类型是基类实例,而不是派生类实例。因此,当从构造函数调用虚拟函数时,只能调用基类虚拟函数重写。

查看完整回答
反对 回复 2019-08-04
  • 3 回答
  • 0 关注
  • 394 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信