C 學習筆記 建構函式與析構函式

2021-08-07 18:08:57 字數 1243 閱讀 1039

1>建構函式

建構函式是類的一種特殊的成員函式;

(1)函式名與類名必須相同

(2)沒有返回值

(3)建構函式可以被過載

class circle

circle(int x,int y,int r)

};  建構函式和普通成員函式不一樣,一般不顯示呼叫,在建立乙個物件時,建構函式被自動呼叫。

建構函式的作用:物件一「出生」就是有效的,不存在「半成品」物件。它可以理解為初始化動作。

類class的初始化使用建構函式的方式。

把那種不需要傳參的建構函式,稱為預設建構函式。物件構造時可以不傳引數,例如object obj;

預設建構函式很重要,如果乙個類沒有預設建構函式,則無法構造陣列。所以一般都要給類定義乙個預設建構函式。

2>析構函式

析構和構造是一對相反的過程。

建構函式:物件被建立時被呼叫

析構函式:物件被銷毀時被呼叫

析構函式也不是普通的函式

(1)名稱固定,類名前加上波浪線~

(2)沒有返回值

(3)不能帶引數

(4)析構函式只能有乙個,不允許過載

class circle

};  析構函式從不顯式呼叫,而是在物件被銷毀之時被編譯器自動的呼叫。

物件被銷毀:對於區域性變數(物件),在超出變數作用域後,該物件失效。對於全域性變數,程式退出之後該物件失效。

析構函式的作用:物件銷毀之前,做乙個清理善後工作。比如釋放記憶體、關閉檔案描述符等。

3>構造與析構

如果乙個類沒有寫任何建構函式和析構函式,則編譯器隱含的生成空的建構函式與析構函式

成員本身也是class型別的情況:

(1)當物件被構造時,成員變數也被構造(成員變數的建構函式被呼叫)。

先執行成員的建構函式,再執行自己的建構函式。成員變數之間從前到後。

(2)當物件被析構時,成員變數也被析構(成員變數的析構函式被呼叫)。

先執行自己的析構函式,再執行成員的析構函式。成員變數之間從後到前。

4>初始化列表

可以在建構函式後面直接初始化

(1)以冒號引導。

(2)使用小括號來初始化。 

例:基本型別初始化:object:x(1),y(2)。

class型別初始化用小括號帶上建構函式object:object_1(1,2)。

「初始化」與「賦值」的區別:

(1)功能上:一樣。

(2)效能上:「初始化」相對較好,有時可以節省cpu操作。

C 學習筆記 建構函式與析構函式

一 派生類建構函式的執行順序 1 呼叫基類建構函式,呼叫順序按照它們被繼承時宣告的基類名順序執行 2 呼叫內嵌物件建構函式,呼叫順序按各個物件在派生類內宣告的順序 3 執行派生類建構函式體中的內容 二 派生類析構函式的執行順序與建構函式相反 1 執行派生類析構函式 2 執行內嵌物件的析構函式 3 執...

C 筆記 建構函式與析構函式

建構函式 宣告類的物件時,該類的建構函式會自動被呼叫 作用 建構函式是用於初始化類的成員變數 析構函式 在類物件被銷毀時,自動呼叫,呼叫順序與建構函式相反 作用 做善後清理工作 class person person person person person const string name,co...

C 學習筆記之建構函式與析構函式

析構函式 疑問class car car car void 定義,其實也可以在宣告時直接定義 建構函式的函式名與所在的類名相同 區分大小寫 在由類定義物件的時候就會第一時間呼叫建構函式 建構函式沒有返回值,不用加void。每乙個類都有至少乙個構造器,自己忘記定義時,編譯器會自動定義乙個空的構造器和副...