C++類體系中,不能被派生類繼承的

編輯器總是根據類型來調用類成員函數。但是一個派生類的指針可以安全轉化爲一個基類指針。這樣刪除一個基類的指針的時候,c++不管這個指針指向一個基類對象還是一個派生類對象,調用的都是基類的析構函數而不是派生類的。如果你依賴於派生類的析構函數的代碼來釋放資源,而沒有重載析構函數,那麼會有資源泄露。所以建議的方式是將析構函數聲明爲虛函數。也就是delete a的時候,也會執行派生類的析構函數。


一個函數一旦聲明爲虛函數,那麼不管你是否加上virtual修飾符,它在所有派生類中都成爲虛函數。但是,由於理解明確起見,建議的方式還是加上virtual修飾符。


構造方法用來初始化類的對象,與父類的其他成員不同,他不能被子類繼承(子類可以繼承父類所有的成員變量和成員方法,但是不繼承父類的構造方法)。因此,在創建子類對象的時候,爲了初始化父類繼承來的數據成員,系統需要調用其父類的的構造方法。


如果沒有顯示的構造函數,編輯器會給一個默認的構造函數,並且該默認的構造函數僅僅在沒有顯示的聲明構造函數情況下創建。


構造原則如下:

1、如果子類沒有定義構造方法,則調用父類的無參數的構造方法。

2、如果子類定義了構造方法,不論是無參數還是帶參數,在創建子類的對象的時候,首先執行父類的無參數的構造方法,然後執行自己的構造方法。

3、在創建子類對象的時候,如果子類的構造函數沒有顯示的調用父類的構造函數,則會調用父類的默認無參構造函數。

4、在創建子類對象的時候,如果子類的構造函數沒有顯示調用父類的構造函數且父類自己提供了無參構造函數,則會調用父類自己的無參構造函數。

5、在創建子類對象的時候,如果子類的構造函數沒有顯示調用父類的構造函數且父類只定義了自己的有參構造函數,則會出錯(如果父類只有有參數的構造方法,子子類必須顯示調用此帶參構造方法)。

6、如果子類調用父類帶參數的構造方法,需要用初始化父類成員對象的方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章