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

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

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

C++
阿晨1998 2019-07-20 14:07:57
构造函数中的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 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

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


查看完整回答
反对 回复 2019-07-20
?
侃侃无极

TA贡献2051条经验 获得超10个赞

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


查看完整回答
反对 回复 2019-07-20
  • 3 回答
  • 0 关注
  • 288 浏览

添加回答

举报

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