繼承與建構函式的呼叫

2021-08-23 14:47:55 字數 333 閱讀 1432

class a public virtual void printfields(){} } class b:a public override void printfields() ,y=", x, y); } }

當使用new b()建立b的例項時,產生什麼輸出?

分析:輸出x=1, y=0;

因為構造b之前,先執行變數,y沒有明確賦值,預設為0。執行b的建構函式,因為b繼承a,所以先執行a的建構函式。a構造函式呼叫的printfields方法在a類裡是虛函式,它的實現是在b類,所以執行b類的printfields方法,結果輸出。雖然繼續執行完b的建構函式,使y的值是-1.但結果之前已經輸出。

C 繼承與建構函式的呼叫

1 例項化父類時,可以使用new子類,執行建構函式順序為 先執行父類建構函式,再執行子類建構函式。2 例項化子類時,只可以new子類,執行順序同上。3 父類例項化後,只能執行父類的方法,獲得父類的屬性等。4 例項化子類後,可同時執行子類和父類的方法和屬性,如同名方法,則執行子類的方法。我們看以下的 ...

C 繼承與建構函式的呼叫

1 例項化父類時,可以使用new子類,執行建構函式順序為 先執行父類建構函式,再執行子類建構函式。2 例項化子類時,只可以new子類,執行順序同上。3 父類例項化後,只能執行父類的方法,獲得父類的屬性等。4 例項化子類後,可同時執行子類和父類的方法和屬性,如同名方法,則執行子類的方法。我們看以下的 ...

C 繼承與建構函式的呼叫

1 例項化父類時,可以使用new子類,執行建構函式順序為 先執行父類建構函式,再執行子類建構函式。2 例項化子類時,只可以new子類,執行順序同上。3 父類例項化後,只能執行父類的方法,獲得父類的屬性等。4 例項化子類後,可同時執行子類和父類的方法和屬性,如同名方法,則執行子類的方法。我們看以下的 ...