一、基本概念
1、虛函數
在類的成員函數前冠以 virtual 關鍵字的函數叫做虛函數。虛函數是實現運行時多態的基礎,可以像普通函數一樣被重載,也可以在派生類中被重寫。
2、純虛函數
純虛函數是指只有函數體,沒有定義函數體的成員函數。純虛函數作爲接口而存在,並不具備具體函數功能。
從基類繼承來的純虛函數,在派生類中仍是純虛函數。
3、抽象類
如果一個類中至少有一個純虛函數,那麼這個類被稱爲抽象類。這種類不能被實例化,但允許聲明一個指向抽象類的對象的指針。
抽象類派生的類如果不對基類的純虛函數進行重寫的話,派生類依然是一個抽象類,只有它重寫了其基類的純虛函數之後它纔不再是一個抽象類。
4、虛基類
如果一個類的所有方法都是純虛的,這個類就被叫做虛基類。
二、代碼演示
1、虛函數
class Test {
public:
virtual void funTest() { //虛函數
printf("test...\n");
}
……
};
2、純虛函數
class Test {
public:
virtual void funTest() = 0; // 純虛函數
……
};
3、抽象類
class Test { // 抽象類
public:
virtual void funTest() = 0;
……
};
Test t; // 錯誤,抽象類不可被實例化
Test * t = NULL; // 正確,可以定義一個抽象類的指針
4、虛基類
class Test { // 虛基類
public:
virtual void funTest1() = 0;
virtual void funTest2() = 0;
};