回覆列表
  • 1 # 使用者6704656755005

    與類名稱具有一樣名稱的成員函式是建構函式。建構函式不能有返回值,甚至不能有return語句。說明一個有返回值的建構函式是錯誤的,取建構函式的地址也是錯誤的。

    如果一個類有建構函式,在程式中每個該類型別的物件在使用之前由此建構函式進行初始化(有關初始化的更多資訊參見本章後面的“用特殊成員函式進行初始化”)。

    建構函式是在物件的建立點上被呼叫的。建立物件可以是:

    * 全域性物件(檔案範圍或外部連結的)。

    * 在一個函式或者小的封閉塊中的區域性變數。

    * 用new運算子建立的動態物件。new操作在程式的堆或自由儲存區中分配一個物件。

    * 因顯式呼叫建構函式而建立的臨時物件(詳見本章後面的“臨時物件”)。

    * 因編譯器隱含呼叫建構函式而建立的臨時物件(詳見本章後面的“臨時物件”)。

    * 其它類的資料成員。在建立類型別的物件時,若此類型別由其它類型別變數組成,將會引起該類中每個物件的建立。

    * 一個類的基類子物件。建立派生類型別的物件時會引起基類構件的建立。

    建構函式的作用

    一個建構函式執行各種任務,但對於程式設計師來說,這些任務是不可見的,你甚至可以不必為建構函式寫任何程式碼。這些任務都同建立一個完全的、正確的類型別物件例項有關。

    在MS C++中(同樣也在很多其它C++中)一個建構函式:

    * 初始化物件的虛擬基指標(vbptr)。

    如果該類是由虛擬基類派生出的,則這一步要執行。

    * 按說明的順序呼叫基類和成員的建構函式。

    * 初始化物件的虛擬函式指標(vfptr)。如果該類有或者繼承了虛擬函式,則這一步要執行,虛擬函式指標指向類的虛擬函式表(v-table),並且使虛擬函式的呼叫同程式碼正確繫結(binding)。

    * 在建構函式體中執行可選的程式碼。

    當建構函式結束以後,所分配的儲存器就是一個給定類型別的物件。因為建構函式執行這些步驟,故虛擬函式的“遲後繫結”形態可以在虛擬函式的呼叫點得以解決,建構函式也要構造基類以及構造組合物件(作為資料成員的物件),遲後繫結是C++實現物件的多型行為的機制。

  • 中秋節和大豐收的關聯?
  • 以欣賞為題作文記敘文?