建構函式的呼叫順序從上面的分析中可以看出,基類建構函式總是被優先呼叫,這說明建立派生類物件時,會先呼叫基類建構函式,再呼叫派生類建構函式,如果繼承關係有好幾層的話,例如:
a --> b --> c
那麼建立 c 類物件時建構函式的執行順序為:
a類建構函式 --> b類建構函式 --> c類建構函式
建構函式的呼叫順序是按照繼承的層次自頂向下、從基類再到派生類的。
還有一點要注意,派生類建構函式中只能呼叫直接基類的建構函式,不能呼叫間接基類的。以上面的 a、b、c 類為例,c 是最終的派生類,b 就是 c 的直接基類,a 就是 c 的間接基類。
c++ 這樣規定是有道理的,因為我們在 c 中呼叫了 b 的建構函式,b 又呼叫了 a 的建構函式,相當於 c 間接地(或者說隱式地)呼叫了 a 的建構函式,如果再在 c 中顯式地呼叫 a 的建構函式,那麼 a 的建構函式就被呼叫了兩次,相應地,初始化工作也做了兩次,這不僅是多餘的,還會浪費cpu時間以及記憶體,毫無益處,所以 c++禁止在c 中顯式地呼叫 a 的建構函式。
C 多繼承建構函式初始化列表呼叫順序
class b1 定義基類b1 class b2 定義基類b2 class b3 定義基類b3 class c public b2,public b1,public b3 繼承類c void main 主函式 執行結果 consb2 2 consb1 1consb3 consb1 3 consb2 ...
C 繼承與建構函式的呼叫
1 例項化父類時,可以使用new子類,執行建構函式順序為 先執行父類建構函式,再執行子類建構函式。2 例項化子類時,只可以new子類,執行順序同上。3 父類例項化後,只能執行父類的方法,獲得父類的屬性等。4 例項化子類後,可同時執行子類和父類的方法和屬性,如同名方法,則執行子類的方法。我們看以下的 ...
C 繼承與建構函式的呼叫
1 例項化父類時,可以使用new子類,執行建構函式順序為 先執行父類建構函式,再執行子類建構函式。2 例項化子類時,只可以new子類,執行順序同上。3 父類例項化後,只能執行父類的方法,獲得父類的屬性等。4 例項化子類後,可同時執行子類和父類的方法和屬性,如同名方法,則執行子類的方法。我們看以下的 ...