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