共用方式為


宣告建構函式的規則

建構函式具有與它的類別相同的名稱。 任何數目的建構函式可以宣告,多載函式的規則。 (如需詳細資訊,請參閱多載化。)

class-name  (  argument-declaration-list  )

備註

argument-declaration-list可能是空的。

C + + 會定義兩種特殊類型的建構函式的預設] 及 [複製建構函式,如下表所示。

預設值,並複製建構函式

一種建構

引數

用途

預設建構函式。

可以使用任何引數呼叫

建構類別型別的預設值物件

複製建構函式

可接受單一引數的相同的類別型別的參考

複製物件的類別型別

預設建構函式可以呼叫沒有指定引數。 不過,您可以宣告引數] 清單中的預設建構函式,但所有的引數有預設值。 同樣地,複製建構函式必須接受單一引數的相同的類別型別的參考。 使用者可以提供更多的引數,、 提供所有後續的引數有預設值。

如果您不提供任何建構函式,編譯器會嘗試產生預設建構函式。 如果您不提供複製建構函式,編譯器會嘗試產生其中一個。 這些編譯器產生建構函式會被視為公用的成員函式。 如果您使用的物件,並不是參考的是第一個引數來指定複製建構函式,會產生錯誤。

編譯器產生預設建構函式會設定的物件 (如先前所述的選項,顯示初始化的 vftables 和 vbtables,) 時,預設建構函式呼叫的基底類別和成員,但它會採取任何其他動作。 只有當它們存在、 可以存取,而且是模稜兩可,會呼叫基底類別和成員建構函式。

編譯器所產生的複製建構函式會設定新的物件,並執行對要複製的物件內容的複本。 如果基底類別或成員的建構函式存在,或是呼叫。 否則,會執行位元複製。

如果類別的所有基底和成員類別type包含複製建構函式接受 const 引數,編譯器所產生的複製建構函式會接受單一引數型別的 consttype。  否則,編譯器所產生的複製建構函式會接受單一引數型別的type

您可以使用建構函式來初始化 const 或volatile ,但物件本身的建構函式不可以宣告為 const 或volatile。 唯一合法儲存類別的建構函式是內嵌。 使用其他任何儲存類別修飾詞,包括__declspec關鍵字,以建構函式會造成編譯器錯誤。

服務繼續操作,呼叫慣例適用於靜態成員函式和全域函式宣告具有 __stdcall 關鍵字,且不使用可變個數引數清單。 當您使用 __stdcall 關鍵字的非靜態成員函式,例如建構函式,編譯器會將 thiscall 呼叫慣例。"

在衍生類別不會繼承基底類別建構函式。 在衍生的類別型別的物件建立時,它的建構是基底類別的元件。 然後,它將移至衍生的類別的元件。 該部分完成的物件已初始化時,編譯器會使用每個基底類別的建構函式 (如中所述,除了虛擬的衍生的情況下初始化基底類別)。

請參閱

參考

建構函式 (C++)