虛函式與建構函式 析構函式

2021-08-03 17:12:19 字數 929 閱讀 6062

虛函式是多型的基礎 (ps多型是乙個介面多個實現)

多型條件:1.繼承 2. 虛函式 3. 父類指標指向子類

#include

using

namespace

std;

class myclass

virtual

void go1()

virtual

void go2()

};class classx:public myclass

};class classy :public myclass

};int main()

//其中sizeof(myclass) 為4,無論有多少虛函式

建構函式不能為虛函式,如果是虛函式,子類無法對父類進行初始化

析構函式能為虛函式,

如果使用多型,析構函式必須為虛函式,否則會造成記憶體洩露

虛構中:父類指標呼叫子類子類的析構,子類析構自動呼叫父類的析構

//使用多型、析構函式不是多型會造成嚴重的記憶體洩露,

因為只會完成父類的析構

#include

using

namespace

std;

class myclass

~myclass()

virtual

void go()

virtual

void go1()

virtual

void go2()

};class classx:public myclass

~classx()

void go()

};class classy :public myclass

};int main011()

int main()

建構函式 析構函式 虛析構函式

說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...

建構函式 析構函式 虛函式

在類中,建構函式用於初始化物件及相關操作。建構函式是不能宣告為虛函式的,因為虛函式對應乙個virtual table 虛函式表 這個表的位址是儲存在物件的記憶體空間的。而在執行建構函式前,物件尚未完成建立,記憶體都沒有被分配,所以無法去查詢虛函式表,它不存在,因此也就無法得知該呼叫哪乙個函式了。析構...

C 建構函式 析構函式 虛析構函式

一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...