gpt4 book ai didi

c++ - 虚拟继承

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:15 25 4
gpt4 key购买 nike

如果我有类似的东西

class Base1 {};

class Base2 {};

class Derived : public Base1, public Base2 {};

那么构造函数调用的顺序是生成 Derived 的对象

Base1
Base2

即按照它们出现的顺序

class Derived : public Base1, public Base2 {};

但是如果我把它改成 派生类:public Base1,virtual public Base2 {};那么构造函数调用的顺序就变成了

Base2
Base1

我不明白为什么会这样?

又一个简单的疑问:虚继承Base1的意义和目的是什么?

最佳答案

这些只是规则。正在构造的最派生类首先初始化层次结构中的所有虚基类,然后再开始初始化其非虚直接基类。

规则来自标准 (ISO/IEC 14882:2011),第 12.6.2 节 [class.base.init]/10。

这种方法的基本原理是它确保所有基类在派生类之前初始化,无论它们是否是虚拟基类。

关于c++ - 虚拟继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10298207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com