C++ 第六章(多型性和虛擬函式)下篇(虛解構函式和純虛擬函式)
阿新 • • 發佈:2019-01-13
一,虛解構函式
如果用new運算子建立了臨時物件,若基類中有解構函式並且定義了一個指向該基類的指標變數。在程式用帶指標引數的delete運算子撤銷物件時,會發生:系統只執行基類的解構函式,而不執行派生類的解構函式。
#include<iostream> using namespace std; class Point{ public : Point(){} ~Point (){cout << "Point de 解構函式" << endl;} }; class Circle:public Point{ public : Circle(){} ~Circle(){ cout << "Circle de 解構函式" << endl;} }; int main(){ Point *p = new Circle; delete p; return 0; }
輸出結果:
Point de 解構函式
並沒有輸出派生類的解構函式
virtual ~Point (){cout << "Point de 解構函式" << endl;}
這樣就可行了。
將基類中的解構函式宣告為虛擬函式,由該基類派生的所有的派生類的解構函式也自動成為虛擬函式。
二,純虛擬函式
純虛擬函式的作用是在基類中為其派生類保留一個函式名字,以便派生類根據需要對他進行定義。如果基類中沒有保留函式名字則無法實現多型性。
virtual 函式型別 函式名(引數列表) = 0;
三,抽象類
定義這些類的唯一目的就是用它作為基類去建立派生類。
凡是包含純虛擬函式的類都是抽象類。因為純虛擬函式是不能被呼叫的,包含純虛擬函式的類是無法建立物件的。抽象類的作用是作為一個類族的共同基類,或者說,為一個類族提供一個公共介面