預設構造函數
預設構造函數
預設構造函數又叫默認構造函數,英文名稱default constructor,是當聲明對象的時候,編譯器會調用的一個構造函數。
在計算機編程語言中,預設構造函數可以指編譯器在沒有任何程序員定義的構造函數(例如Java)的情況下自動生成的構造函數,通常是無用的構造函數。在其他語言中(例如在C ++中),無論構造函數是自動生成的還是用戶定義的,它都是可以調用的構造函數,無需提供任何參數。請注意,如果在構造函數的定義中提供了默認參數,那麼帶有形參的構造函數仍然可以不帶參數地被調用。
++,該標準類默構造函描述參調構造函(包含構造函,參具預設參)。例:
態配存,類添括弧調構造函。某義,構造函顯式調:
構造函確參,默值,仍默構造函。請,類默構造函,參,參默值構造函,況:
在C ++中,默認構造函數非常重要,因為它們在某些情況下會自動調用;因此,在這些情況下,類沒有默認構造函數是錯誤的:
當沒有參數列表(例如:MyClass x;)或者沒有參數列表(例如:new MyClass;或new MyClass();)動態分配對象值時,MyClass的默認構造函數用於初始化對象。
當聲明一個對象數組時,例如MyClass x ;;或動態分配,例如,新的MyClass。 MyClass的默認構造函數用於初始化所有元素。
當派生類構造函數未在其初始化程序列表中顯式調用基類構造函數時,將調用基類的默認構造函數。
當類構造函數沒有在其初始化列表中明確調用其某個對象值域的構造函數時,將調用該欄位類的默認構造函數。
在標準庫中,當沒有明確給定值時,某些容器使用默認構造函數“填充”值。例如。向量(10);用10個元素初始化矢量,這些元素用默認構造的MyClass對象填充。
如果一個類沒有明確定義的構造函數,編譯器會隱式聲明並為其定義一個默認的構造函數。這個隱式定義的默認構造函數等價於一個空體明確定義的構造函數。例如:
如果構造函數是為一個類明確定義的,但它們都是非默認的,編譯器將不會隱式地定義一個默認構造函數,從而導致類沒有默認構造函數的情況。這是典型錯誤的原因,如下例所示。
由於程序員和編譯器都沒有定義默認的構造函數,因此由p指向的對象的創建會導致錯誤。
另一方面,在C ++ 11中,可以顯式創建一個默認構造函數:
在Java和C#中,“默認構造函數”指的是如果沒有為該類定義構造函數,那麼編譯器會自動生成一個空構造函數。默認構造函數隱式調用超類的空構造函數,然後執行一個空體。所有欄位的初始值都為0(整數類型),0.0(浮點類型),false(布爾類型)或null(引用類型)。一個不帶參數的程序員定義的構造函數在C#中也被稱為默認構造函數,但不是在Java中。