C 預設建構函式

2021-09-30 14:15:16 字數 1024 閱讀 1940

預設的建構函式是指為所有引數都提供了預設值的建構函式,通常是指無參的建構函式。比如下面的類a,預設建構函式即為a()。

class a//default constructor

};

如果你對所定義的類沒有提供建構函式,則編譯器會自動為你生成乙個預設的無引數建構函式;一旦你為你的類定義了建構函式,哪怕只是乙個,那麼編譯器將不再生成預設的建構函式。

有很多原因,列舉如下:

1.當你使用靜態分配的陣列,而陣列元素型別是某個類的物件時,就要呼叫預設的建構函式,比如下面的**。

object buffer[10]; // call default constructor
2.當你使用動態分配的陣列,而陣列元素型別是某個類的物件時,就要呼叫預設的建構函式,比如下面的**,如果object沒有預設的建構函式,是無法通過編譯的,因為new操作符要呼叫object類的無參建構函式類初始化每個陣列元素。

object* buffer = new

object[10];

3.當你使用標準庫的容器時,如果容器內的元素型別是某個類的物件時,那麼這個類就需要預設的建構函式,原因同上。

vector

buffer;

4.乙個類a以另外某個類b的物件為成員時,如果a提供了無參建構函式,而b未提供,那麼a則無法使用自己的無參建構函式。下面的**將導致編譯錯誤。

classb};

class

a b b;

};int main(void)

再比如下面的**,類a定義了拷貝建構函式,而沒有提供預設的建構函式,b繼承自a,所以b在初始化時要呼叫a的建構函式來初始化a,而a沒有預設的建構函式,故產生編譯錯誤。

classa};

class

b : publica;

int main(void)

C 預設建構函式

c 預設建構函式 一直認為若程式設計師沒有自己定義無引數的建構函式,那麼編譯器會自動生成預設建構函式,來進行對成員函式的初始化,但這種認為是有誤的,不全面的.預設的建構函式分為有用的和無用的,所謂無用的預設建構函式就是乙個空函式 什麼操作也不做,而有用的預設建構函式是可以初始化成員的函式。對建構函式...

c 預設建構函式

c 什麼時候合成預設建構函式?c 合成的預設建構函式都做些什麼?以下三個條件同時滿足 源程式中沒有宣告任何建構函式 編譯器需要該類有預設建構函式 程式中需要呼叫預設建構函式 預設建構函式是以編譯單元為單位生成的 什麼時候編譯器需要預設建構函式 該類中有 有預設建構函式 的成員物件 該類繼承乙個有預設...

C 預設建構函式

先說c 新手一般的誤解 1.任何乙個類如果沒有定義預設建構函式,編譯器會自動合成乙個預設建構函式。2.編譯器合成出來的預設建構函式,會顯式的設定類中成員變數的值。先看乙個最基本的例子 從圖中可以看到物件a並沒有被初始化,即編譯器沒有為類a合成乙個預設建構函式。其實c 標準委員會曾敘述,如果沒有任何使...