繁体   English   中英

C ++多重继承顺序

[英]C++ multiple inheritance order

我试图理解C ++中继承顺序的影响..我在线查看,但我找不到一个明确而充分的答案......

所以,为了这个问题,假设有两个类:B类和C类。

现在,定义:

class A1 : public B, public C{ ... };
class A2 : public C, public B{ ... };

A1和A2有什么区别?

非常感谢!

派生顺序仅与确定构造函数的默认初始化顺序和析构函数清理相关。

除了由构造函数(12.6.2),清理(12.4)和存储布局(9.2,11.1)的初始化语义指定之外,派生的顺序并不重要。 - 尾注]“(§10.1/ 2)

来自IBM的C ++文档: 多重继承

C ++ 11标准说(第10.1节) [class.mi]

除了由构造函数(12.6.2),清理(12.4)和存储布局(9.2,11.1)的初始化语义指定之外,派生的顺序并不重要。

引用的三个段落揭示了这一点

  • 构造函数按照您编写它们的顺序调用(列表中的第一个基类首先构造)(第12.6.2.10节)。 不同的规则适用于虚拟基类,它们总是在任何直接基类之前从最派生的类构造。
  • 以相反的构造顺序调用析构函数(列表中的第一个基类最后被破坏)
  • 存储布局未指定。 您不能对内存中的类布局做任何假设。 唯一的例外是所谓的标准布局类(§9),它基本上是一个C风格的结构。 但是由于不允许在类层次结构中有多个具有非静态成员的类,因此这个问题并不适用。

请注意,内存布局可能很重要。 例如,如果外部库进行天真的C样式转换,假设它感兴趣的对象部分位于开头,则可能导致难以调试的运行时错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM