在C++中,純虛函數(shù)是在基類中聲明的虛函數(shù),它沒有定義具體的實(shí)現(xiàn)。派生類可以通過覆蓋(override)純虛函數(shù)來提供具體的實(shí)現(xiàn)。當(dāng)一個類包含至少一個純虛函數(shù)時,它被稱為抽象類,不能直接實(shí)例化。
以下是一個關(guān)于如何在C++中實(shí)現(xiàn)純虛函數(shù)繼承的示例:
#include <iostream>
// 基類 Shape,包含一個純虛函數(shù) area()
class Shape {
public:
// 構(gòu)造函數(shù)
Shape() {
std::cout << "Shape 構(gòu)造函數(shù)被調(diào)用" << std::endl;
}
// 虛析構(gòu)函數(shù),確保派生類的析構(gòu)函數(shù)被正確調(diào)用
virtual ~Shape() {
std::cout << "Shape 析構(gòu)函數(shù)被調(diào)用" << std::endl;
}
// 純虛函數(shù) area(),計(jì)算形狀的面積
virtual double area() const = 0;
};
// 派生類 Circle,繼承自 Shape
class Circle : public Shape {
public:
// 構(gòu)造函數(shù)
Circle(double radius) : radius_(radius) {
std::cout << "Circle 構(gòu)造函數(shù)被調(diào)用" << std::endl;
}
// 析構(gòu)函數(shù)
~Circle() {
std::cout << "Circle 析構(gòu)函數(shù)被調(diào)用" << std::endl;
}
// 覆蓋基類的純虛函數(shù) area(),計(jì)算圓的面積
double area() const override {
return 3.14159 * radius_ * radius_;
}
private:
double radius_;
};
int main() {
// 由于 Shape 是抽象類,不能實(shí)例化對象
// Shape shape; // 錯誤
// 創(chuàng)建一個指向派生類 Circle 的指針,指向一個 Shape 類型的對象
Shape* shape = new Circle(5.0);
// 調(diào)用 area() 函數(shù)
std::cout << "圓的面積: " << shape->area() << std::endl;
// 釋放內(nèi)存
delete shape;
return 0;
}
在這個示例中,我們定義了一個抽象基類 Shape
,其中包含一個純虛函數(shù) area()
。然后,我們創(chuàng)建了一個派生類 Circle
,繼承自 Shape
,并覆蓋了 area()
函數(shù)以計(jì)算圓的面積。在 main()
函數(shù)中,我們使用一個指向 Shape
類型的指針指向一個 Circle
對象,并調(diào)用 area()
函數(shù)。