纯虚函数(pure virtual function)是一个在基类中声明的虚函数,它没有函数体,只有声明。纯虚函数通过在函数声明的结尾处使用 = 0
来标识。纯虚函数的存在使得基类成为一个抽象类(abstract class),这意味着不能直接实例化该类,而只能用作其他类的基类,提供接口规范。
语法:
class Base {
public:
virtual void virtualFunction() = 0; // 纯虚函数声明
// 其他成员函数和成员变量
};
特点和使用场景:
- 纯虚函数声明:
- 在声明纯虚函数时,必须在函数末尾使用
= 0
,表示该函数是纯虚函数。
- 抽象类:
- 包含至少一个纯虚函数的类被称为抽象类。抽象类不能直接实例化为对象,只能用作其他类的基类。
- 派生类实现:
- 任何派生自抽象类的具体类,必须实现(覆盖)所有继承的纯虚函数,才能成为一个具体类(可以实例化的类)。
- 虚析构函数:
- 如果基类包含纯虚函数,则通常建议为其提供一个虚析构函数。例如:
这样做是为了确保通过基类指针释放派生类对象时,能正确调用派生类的析构函数。virtual ~Base() {}
示例:
class Shape {
public:
virtual void draw() const = 0; // 纯虚函数
virtual ~Shape() {} // 虚析构函数
};
class Circle : public Shape {
public:
void draw() const override {
// 实现圆形的绘制
}
};
class Square : public Shape {
public:
void draw() const override {
// 实现正方形的绘制
}
};
int main() {
// Shape shape; // 错误,不能实例化抽象类
Circle circle;
Square square;
Shape* ptrShape1 = &circle;
Shape* ptrShape2 = □
ptrShape1->draw();
ptrShape2->draw();
return 0;
}