虛函式是多型的基礎 (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撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...