C 構造和析構

2021-09-08 20:33:50 字數 803 閱讀 6794

1、繼承關係可認為,子類在父類的基礎上進行。從這個角度講,可把它認為穿衣**的過程。穿衣是:先穿內衣,再穿外套。**是:先脫外套,在***。構造是:先呼叫父類構造方法,再呼叫子類構造方法。析構是:先呼叫子類析構方法,再呼叫父類析構方法。

2、構造可分為兩個步驟:初始化列表和方法內賦值。前者的使用場景是:初始化,即copy構造。後者的使用場景是:賦值,即copy賦值。

a、對於類型別,如果沒有在初始化列表中顯式初始化,會進行隱式初始化,呼叫預設構造方法。因此,沒有預設構造方法的類成員,必須顯式初始化。

b、對於基本型別,如果沒有在初始化列表中顯式初始化,不會進行隱式初始化。初始值依賴於物件的作用域:區域性物件不被初始化,為0xcccccccc(並不是初始化為隨機值),全域性物件初始值為0。

c、在初始化列表或者賦值階段,都可以達到同樣的效果。但是,對於類型別,如果在賦值階段進行,相當於執行了一次copy構造(呼叫預設構造方法),一次copy賦值,因此,對於類型別,應該使用初始化列表,效率高。對於基本型別,因為沒有隱式初始化,在初始化列表或者賦值階段,都是一樣的。

d、但是有三種情況必須在初始化列表中進行:d1、沒有預設構造方法的類型別,因為沒有顯示初始化,會進行隱式初始化,呼叫預設構造方法,導致編譯出錯;d2、const物件,必須初始化;d3、引用型別,必須初始化。

e、類成員初始化的順序,與初始化列表中的順序無關,而與類定義中宣告的順序相關。

3、析構可認為分為兩個步驟:自定義析構方法和合成析構方法。

a、自定義析構方法:釋放獲取的資源。

b、合成析構方法:按建立時的逆序撤銷每個非static成員,如果成員是類型別,呼叫該成員的析構方法撤銷物件。

C 構造和析構

include using namespace std class b b b b b b int i data i b operator b b private int data b play b b int main output constructed by parameter 5 destr...

C 構造和析構

建構函式的作用是給類中的資料成員初始化,在乙個類物件產生的時候自動呼叫,建構函式分為帶參構造 無參構造。他倆唯一的區別就是乙個有引數,乙個沒引數,視實際情況使用 class cmyc cmyc cmyc cmyc cmyc int a,float b,char ch 它在乙個類物件被建立的時候自動呼...

C 析構和構造

1.析構為構造的逆序,單繼承派生類只有乙個基類或虛基類,根據四個優先級別確定構造順序 2.基類 物件成員不列出時自動呼叫無參建構函式 3.以下情況派生類必須定義自己的建構函式 include using namespace std class a 非const例項資料成員a,可在函式體內再次對a賦值...