我正在尝试理解继承顺序在C++中的影响。我在网上看了看,但我找不到一个明确而充分的答案……
因此,为了解决这个问题,假设有两个类:B类和C类。
现在,定义:
class A1 : public B, public C{ ... };
class A2 : public C, public B{ ... };A1和A2有什么区别?
非常感谢!
发布于 2013-06-27 04:08:39
C++11标准规定(§10.1) [class.mi]
除非由构造函数初始化(12.6.2)、清理(12.4)和存储布局(9.2,11.1)的语义指定,否则派生的顺序并不重要。
引用的三个段落揭示了
请注意,内存布局可能很重要。例如,如果外部库进行简单的C风格强制转换,假设它感兴趣的对象部分位于开头,则可能导致难以调试的运行时错误。
发布于 2013-06-27 03:37:24
派生的顺序只与确定构造函数的默认初始化顺序和析构函数的清除顺序有关。
除非由构造函数初始化(12.6.2)、清理(12.4)和存储布局(9.2,11.1)的语义指定,否则派生的顺序并不重要。-尾注]“(§10.1/2)
来自IBM的C++文档:Multiple inheritance
https://stackoverflow.com/questions/17328921
复制相似问题