在 C++ 中,當一個類含有至少一個純虛函數時,這個類被稱為抽象類。純虛函數的聲明語法是在函數聲明的結尾處添加 “= 0”。以下是一個包含純虛函數的抽象類的示例:
#include <iostream>
// 聲明一個抽象類 Shape
class Shape {
public:
// 構造函數
Shape() {
std::cout << "Shape constructor called." << std::endl;
}
// 虛析構函數
virtual ~Shape() {
std::cout << "Shape destructor called." << std::endl;
}
// 純虛函數 area,計算面積
virtual double area() const = 0;
// 純虛函數 perimeter,計算周長
virtual double perimeter() const = 0;
};
// 定義一個繼承自 Shape 的子類 Circle,表示圓形
class Circle : public Shape {
public:
// 構造函數,接收半徑作為參數
Circle(double radius) : radius_(radius) {
std::cout << "Circle constructor called with radius: " << radius_ << std::endl;
}
// 析構函數
~Circle() {
std::cout << "Circle destructor called." << std::endl;
}
// 實現純虛函數 area,計算圓形的面積
double area() const override {
return 3.14159 * radius_ * radius_;
}
// 實現純虛函數 perimeter,計算圓形的周長
double perimeter() const override {
return 2 * 3.14159 * radius_;
}
private:
// 成員變量,表示圓的半徑
double radius_;
};
int main() {
// 由于 Shape 是抽象類,不能創建它的實例
// Shape shape; // 這行代碼會導致編譯錯誤
// 創建一個 Circle 對象
Circle circle(5.0);
// 調用 area 和 perimeter 函數
std::cout << "Circle area: " << circle.area() << std::endl;
std::cout << "Circle perimeter: " << circle.perimeter() << std::endl;
return 0;
}
在這個示例中,我們定義了一個抽象類 Shape
,它包含兩個純虛函數 area()
和 perimeter()
。然后我們定義了一個繼承自 Shape
的子類 Circle
,并實現了這兩個純虛函數。在 main()
函數中,我們創建了一個 Circle
對象,并調用了它的 area()
和 perimeter()
函數。