建構函式和析構函式是否應該為虛函式

2021-09-25 15:56:40 字數 514 閱讀 4740

建構函式不能是虛函式。因為建立派生類的物件時,將呼叫派生類的建構函式,而不是基類的建構函式,然後,派生類的建構函式將使用基類的乙個建構函式,這種順序不同於繼承機制。因此,派生類不繼承基類的建構函式,所以將類建構函式宣告為虛的沒什麼意義。

析構函式應該是虛函式,除非類不用做基類。例如當e為基類,s是派生類,並新增乙個char*成員,該成員指向由new分配的記憶體。當s物件過期的時候,必須呼叫s的析構函式來釋放記憶體。

如下**將會解釋為什麼,析構函式應當是虛函式:

e pe = new s;

delete pe;

如果在上述**中,e中定義的析構函式不是虛函式,那麼在第二行delete的時候就只會呼叫e類的析構函式,那麼s中的char*成員所分配的記憶體將得不到釋放。所以要把析構函式宣告為虛函式。當將其宣告為虛函式時,在上述**中,先呼叫s的析構函式釋放s元件所指向的記憶體,然後呼叫e析構函式來釋放由r元件指向的記憶體。

一般情況下應給基類提供乙個虛析構函式,即使它不作為基類或者並不需要析構函式。

多型基類的析構函式應該為虛函式

includeusing namespace std class cbird cbird virtual void fly class clark public cbird clark void fly int main cbird作為基類描述鳥類的一般行為和屬性,因為不同鳥類的飛行特點不同,所以基...

多型基類的析構函式應該為虛函式

includeusing namespace std class cbird cbird virtual void fly class clark public cbird clark void fly int main cbird作為基類描述鳥類的一般行為和屬性,因為不同鳥類的飛行特點不同,所以基...

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

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