1
如果我定義了多個其他結構繼承的結構,請問爲了我列出了他們的影響是這樣的:C++繼承順序以何種方式影響構造函數?
struct D: C,B{
D(): B(), C(){...}
};
簡單的問題,但在此先感謝!
如果我定義了多個其他結構繼承的結構,請問爲了我列出了他們的影響是這樣的:C++繼承順序以何種方式影響構造函數?
struct D: C,B{
D(): B(), C(){...}
};
簡單的問題,但在此先感謝!
構造的順序取決於繼承的順序。初始化順序無關緊要。 GCC實際上在這種情況下發出警告。
在構造 'd :: d()':
main.cpp中:16:17:警告:基地 'B' 將後 [-Wreorder]
被初始化D(): B(), C(){ ^
main.cpp中:16:17:警告:基地 'C'[-Wreorder]
main.cpp中:16:5:警告:這裏初始化時[-Wreorder]
D(): B(), C(){
它在標準中也有明確規定。從部分12.6.2初始化鹼和成員
初始化按照下列順序進行:
- 首先,只對最派生類的構造,如下所述 , 虛基類應按照它們在 上出現的順序對其進行深度優先從左到右遍歷的基本類 的有向無環圖進行初始化,其中「從左到右」是基類名稱中出現 基類名的順序派生類base-specifier-列表。
- 然後,直接基類應按聲明順序進行初始化,因爲它們的 出現在基本說明符列表中(不管 mem初始化程序的順序如何)。