class 和接口之间的继承顺序重要吗?
Does order of inheritance between class and interface matter?
先继承class
还是继承C++
中的interface
会有什么不同吗?
示例:
class A : public IAbstract, public ClassB
{
};
class A : public ClassB, public IAbstract
{
};
是的,对象布局会有所不同。然而在功能上,它是等价的。
在第一种情况下,对象布局将是这样的:
------
IAbstract members, including vptr
------
Class B members
------
第二种情况:
------
Class B members
------
IAbstract members, including vptr
------
直接基 classes(即 ClassB
和 IAbstract
)的 initialization order 会有所不同。它由基础 class 说明符列表中的声明顺序决定。
(强调我的)
2) Then, direct base classes are initialized in left-to-right order as they appear in this class's base-specifier list
先继承class
还是继承C++
中的interface
会有什么不同吗?
示例:
class A : public IAbstract, public ClassB
{
};
class A : public ClassB, public IAbstract
{
};
是的,对象布局会有所不同。然而在功能上,它是等价的。
在第一种情况下,对象布局将是这样的:
------
IAbstract members, including vptr
------
Class B members
------
第二种情况:
------
Class B members
------
IAbstract members, including vptr
------
直接基 classes(即 ClassB
和 IAbstract
)的 initialization order 会有所不同。它由基础 class 说明符列表中的声明顺序决定。
(强调我的)
2) Then, direct base classes are initialized in left-to-right order as they appear in this class's base-specifier list