在C++中,純虛函數是一種特殊類型的虛函數,它在基類中沒有定義具體的實現,而是用= 0
表示。派生類必須提供純虛函數的具體實現,否則它們也將成為抽象類,無法實例化。
以下是如何使用純虛函數的示例:
#include <iostream>
// 定義一個抽象基類 Shape
class Shape {
public:
// 構造函數
Shape() {
std::cout << "Shape 構造函數被調用" << std::endl;
}
// 虛析構函數
virtual ~Shape() {
std::cout << "Shape 析構函數被調用" << std::endl;
}
// 純虛函數,計算面積
virtual double area() const = 0;
};
// 定義一個繼承自 Shape 的派生類 Circle
class Circle : public Shape {
public:
// 構造函數
Circle(double radius) : radius_(radius) {
std::cout << "Circle 構造函數被調用" << std::endl;
}
// 析構函數
~Circle() {
std::cout << "Circle 析構函數被調用" << std::endl;
}
// 提供純虛函數 area 的具體實現
double area() const override {
return 3.14159 * radius_ * radius_;
}
private:
double radius_;
};
int main() {
// 由于 Shape 是抽象類,不能實例化對象
// Shape shape; // 錯誤
// 創建一個指向 Shape 的指針,指向一個 Circle 對象
Shape* shape = new Circle(5.0);
// 調用純虛函數 area
std::cout << "圓的面積: " << shape->area() << std::endl;
// 釋放內存
delete shape;
return 0;
}
輸出結果:
Shape 構造函數被調用
Circle 構造函數被調用
圓的面積: 78.5398
Circle 析構函數被調用
Shape 析構函數被調用