在 C++ 中,純虛函數是在基類中聲明的虛函數,它沒有定義具體的實現,而是用= 0
來表示。派生類必須實現這個純虛函數,否則它們也將成為抽象類,無法實例化。
下面是一個簡單的純虛函數的定義示例:
#include <iostream>
using namespace std;
// 基類 Shape
class Shape {
public:
// 構造函數
Shape() {
cout << "Shape 構造函數被調用" << endl;
}
// 虛析構函數
virtual ~Shape() {
cout << "Shape 析構函數被調用" << endl;
}
// 純虛函數,計算面積
virtual double area() const = 0;
};
// 派生類 Circle,繼承自 Shape
class Circle : public Shape {
public:
// 構造函數
Circle(double radius) : radius_(radius) {
cout << "Circle 構造函數被調用" << endl;
}
// 析構函數
~Circle() {
cout << "Circle 析構函數被調用" << endl;
}
// 實現純虛函數 area
double area() const override {
return 3.14 * radius_ * radius_;
}
private:
double radius_;
};
int main() {
// 由于 Shape 是抽象類,無法實例化對象
// Shape shape; // 錯誤
// 創建一個指向 Shape 的指針,指向一個派生類對象
Shape* shape = new Circle(5.0);
// 調用 area 函數
cout << "圓的面積: " << shape->area() << endl;
// 釋放內存
delete shape;
return 0;
}
在這個例子中,我們定義了一個抽象基類 Shape
,其中包含一個純虛函數 area()
。然后我們定義了一個派生類 Circle
,繼承自 Shape
,并實現了 area()
函數。在 main()
函數中,我們創建了一個指向 Shape
的指針,指向一個 Circle
對象,并調用了 area()
函數。注意,我們不能創建 Shape
類的對象,因為它是一個抽象類。