抽象基類通常包含至少一個純虛函數,即一個沒有具體實現的虛函數,通過在基類中聲明純虛函數,它強制派生類提供這個函數的具體實現。
通過在類的聲明中使用 virtual
關鍵字和 = 0
初始化來創建純虛函數,這樣的類就成為抽象基類。以下是一個示例:
class Shape {
public:// 純虛函數,使得Shape成為抽象基類virtual void draw() const = 0;// 其他虛函數virtual double area() const {return 0.0;}// 普通成員函數void displayInfo() const {// ...}
};
讓我們對 virtual void draw() const = 0;
這行代碼的每個部分進行簡單的介紹:
-
virtual
關鍵字:virtual
是 C++ 中用于聲明虛函數的關鍵字。
-
void
:void
是函數的返回類型,表示該函數不返回任何值。
-
draw()
:draw
是函數的名稱,這里是虛函數的名稱。
-
const
關鍵字:const
是常量修飾符,表示該函數不會修改調用對象的成員變量。- 這種聲明方式可以使得常量對象也能夠調用這個函數。
-
= 0
:= 0
是在聲明中虛函數的方式,表示這是一個純虛函數。- 純虛函數是沒有實際實現的虛函數,要求任何派生類必須提供自己的實現。
- 類中有純虛函數的類稱為抽象基類,不能被實例化,只能被用作其他類的基類。
所以,virtual void draw() const = 0;
表示這是一個虛函數 draw
,它是一個純虛函數,沒有具體的實現,而且它不會修改調用對象的狀態。
在這個例子中,Shape
就是一個抽象基類,它包含一個純虛函數 draw()
。任何繼承自 Shape
的派生類都必須提供 draw()
的具體實現。
int main() { // 錯誤,不能實例化抽象類 // Shape shape; // Shape的純虛函數draw()必須在派生類中實現return 0; }
抽象基類的目的是為了提供一個通用的接口,使得不同的派生類能夠共享相似的行為,并通過多態性實現對這些不同派生類的統一處理。