建構函式和析構函式解析

2021-07-11 07:50:22 字數 1688 閱讀 9380

1、建構函式

1.1、建構函式的執行順序

子類會自動呼叫父類的預設建構函式;

如果父類中沒有預設建構函式,子類又沒有顯示宣告呼叫( 如son():super(1) ),會提示錯誤。

建構函式順序如下:

1、 如果有基類則首先構造基類;

1)呼叫順序僅僅和繼承宣告時一致,

2)不管是否在子類的建構函式實現時給出顯示呼叫,例如child(int i) : parent2(i),parent1(i) ;     

3) 如果建構函式定義後給出了呼叫方式,就不呼叫預設的建構函式,而是按照給出的方式構造,但是順序還是按照上面所說。

例如child(int i) :member1(1), member2(2) ,parent2(i),parent1(i) 定義,則呼叫給出的有參建構函式;

2、 非static資料成員按照宣告順序構造;

不管是否在子類的建構函式中給出顯示呼叫,例如 child(int i) : something2(i),something1(i);

3、 執行建構函式體

1.2、建構函式是否有必要設定為虛函式(virtrual)

建構函式沒必要設定為虛函式,因為建立物件時,類是明確的;而且缺省會呼叫父類的建構函式。

2、析構函式

1.1、析構函式的執行順序

子類會自動呼叫父類的析構函式;且和構造函式呼叫完全程逆序。

析構函式執行順序和建構函式正好相反:

1、 呼叫自身的析構函式;

2、 按照構造的逆序刪除資料成員;

3、 如果有父類,按照繼承的逆序,刪除父類。

1.2、析構函式是否有必要設定為虛函式(virtrual)

良好的習慣是,析構函式必須宣告為虛函式;

這樣在實現多型,銷毀物件是,才會從真正物件的析構函式執行起;

否則父類指標指向子類物件,deelte時,只會執行父類的析構函式,造成記憶體洩漏;或者執行出錯。

建構函式和析構函式例項解析

在c 中,建立物件時呼叫建構函式進行初始化,物件結束生命週期時呼叫析構函式進行 善後 工作。三 建構函式的分類 程式中難以察覺的錯誤多是由於變數沒有被正確初始化或清除造成的,而初始化和清除工作很容易被人遺忘。bjarne stroustrup在設計c 語言時充分考慮到了這個問題並很好地加以解決。建立...

建構函式和析構函式

建構函式沒有返回值,不能被顯示的呼叫。它是在定義物件時由系統自動執行的,而且只執行一次。如果沒有定義建構函式,系統會自動生成乙個建構函式,只是這個建構函式的函式體是空,沒有引數,也不執行任何初始化的操作。帶引數的建構函式 有一種簡練,方便的寫法 建構函式的引數初始化表 box int h,int w...

析構函式和建構函式

每個物件生成的時候都要完成物件的初始化,如設定屬性的初始值。c 中規定每個類都有乙個初始值,如果沒有,系統會產生乙個預設的建構函式。這個建構函式沒有任何引數,不做任何額外的工作。但往往我們會自己寫乙個建構函式,用來進行特殊的初始化工作。這樣的話,編譯器就不會再為其生成預設的建構函式。class 類名...