1. 程式人生 > >C++派生類的建構函式和解構函式執行順序及其構造形式

C++派生類的建構函式和解構函式執行順序及其構造形式

    在C++程式設計師的面試中,經常會出現派生類與基類的建構函式、解構函式的執行順序。其實這是一個很基本的問題,沒有什麼難度,只需要記住就OK了。 

    1.派生類的建構函式和解構函式的執行順序

    首先執行基類的建構函式,隨後執行派生類的建構函式,當撤銷派生類物件時,限執行派生類的解構函式,再執行基類的解構函式。

    2.派生類建構函式和解構函式的構造原則

    1)派生類不能繼承基類中的建構函式和解構函式。

    當基類含有帶引數的建構函式時,派生類必須定義建構函式,以提供把引數傳遞給基類建構函式的途徑。

    格式: 派生類建構函式名(引數表):基類建構函式名(引數表)

           {

           //……

           }

    2)當派生類中還有物件成員時,其建構函式的一般形式為:

          派生類建構函式名(引數表):基類建構函式名(引數表),物件成員名 1(引數表),……物件成

          員名 n(引數表)

          {

          //……

          }

    執行順序:

        基類的建構函式

        物件成員的建構函式

        派生類的建構函式

    注意

    1.當基類建構函式不帶引數時,派生類不一定需要定義建構函式,然而當基 類的解構函式哪怕只有一個引數,也要為派生類定義建構函式,甚至所定義的派 生類解構函式的函式體可能為空,僅僅起到傳遞引數的作用

    2.當基類使用預設建構函式時或不帶引數的建構函式時,則在派生類中定義 建構函式時,可以省略:基類建構函式名(引數表),此時若派生類不需要構造 函式,則可以不定義建構函式。

    3.如果派生類的基類也是一個派生類,則每個派生類只需負責其直接基類的 構造,依次上溯。

    4.如果解構函式是不帶引數的,在派生類中是否要定義解構函式與它所屬的 基類無關,故基類的解構函式不會因為派生類沒有解構函式而得不到執行,他們各自是獨立的