1. 程式人生 > >C++ 第六章(多型性和虛擬函式)下篇(虛解構函式和純虛擬函式)

C++ 第六章(多型性和虛擬函式)下篇(虛解構函式和純虛擬函式)

一,虛解構函式

如果用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;

三,抽象類

定義這些類的唯一目的就是用它作為基類去建立派生類。

凡是包含純虛擬函式的類都是抽象類。因為純虛擬函式是不能被呼叫的,包含純虛擬函式的類是無法建立物件的。抽象類的作用是作為一個類族的共同基類,或者說,為一個類族提供一個公共介面