純虛函數,虛函數,抽象類,純抽象類
純虛函數:
virtual A()=0;
虛函數:
virtual A()
{
print("我是虛函數");
}
抽象類:
如果類包含了一個純虛函數,該類是抽象類,抽象類不能實例化。
抽象類爲什麼不能實例化對象:因爲抽象類中包含有沒有定義的函數,因此不能用抽象類來實例化對象。但可以聲明抽象類的指針指向派生類。
如果抽象類A的派生類B沒有完全覆蓋類A的所有純虛函數,那麼類B依然是抽象類,類的抽象屬性可以被繼承。
純抽象類:
如果一個類除了構造函數和析構函數以外的所有成員函數都是純虛函數,那麼該類是純抽象類。
一般來說,如果一個類要被另外一個類繼承,而且用其指針指向其子類對象時,如題目中的A* d = new B();(假定A是基類,B是從A繼承而來的派生類),那麼其(A類)析構函數必須是虛的,否則在delete d時,B類的析構函數將不會被調用,因而會產生內存泄漏和異常;
爲什麼?
在構造一個類的對象時,先構造其基類子對象,即調用其基類的構造函數,然後調用本類的構造函數;銷燬對象時,先調用本類的析構函數,然後再調用其基類的構造函數;
多態性指相同對象收到不同消息或不同對象收到相同消息時產生不同的實現動作。C++支持兩種多態性:編譯時多態性,運行時多態性。
a.編譯時多態性:通過重載函數實現
b 運行時多態性:通過虛函數實現。
https://www.cnblogs.com/diegodu/p/4235392.html