纯虚函数是无实现的虚函数,要求派生类重写,语法为virtual 返回类型 函数名() = 0;;包含纯虚函数的类为抽象类,不能实例化,用于定义接口和实现多态。

在C++中,纯虚函数和抽象类是实现多态和接口设计的重要机制。它们为类的继承体系提供了规范,强制派生类实现特定功能。
什么是纯虚函数?
纯虚函数是一种特殊的虚函数,它在基类中声明但不提供实现,要求派生类必须重写该函数。纯虚函数的语法形式如下:
virtual 返回类型 函数名() = 0;例如:
class Shape { public: virtual void draw() = 0; // 纯虚函数 };这个 draw() 函数没有函数体,只是定义了接口。任何包含纯虚函数的类都不能直接实例化对象。
立即学习“C++免费学习笔记(深入)”;
什么是抽象类?
只要一个类中有一个或多个纯虚函数,它就被称为抽象类。抽象类不能创建对象,它的作用是作为其他类的基类,定义一组公共接口。
比如上面的 Shape 类就是一个抽象类。你可以用它来指代具体图形,但不能写 Shape s; 这样的代码。
抽象类常用于以下场景:
- 统一接口管理不同子类对象
- 构建可扩展的类层次结构
- 实现运行时多态
抽象类的使用示例
看一个完整例子:
#include iostream> using namespace std;class Shape { public: virtual void draw() = 0; // 纯虚函数 virtual ~Shape() {} // 虚析构函数推荐添加 };
class Circle : public Shape { public: void draw() override { cout wing a circle\n"; } };
class Rectangle : public Shape { public: void draw() override { cout
在这个例子中,Shape 是抽象类,Circle 和 Rectangle 是具体类,必须实现 draw() 函数。
可以通过基类指针调用多态行为:
int main() { Shape* shapes[2]; shapes[0] = new Circle(); shapes[1] = new Rectangle();for (int i = 0; i zuojiankuohaophpcn 2; ++i) {
shapes[i]-youjiankuohaophpcndraw(); // 动态绑定,调用对应实现
}
for (int i = 0; i zuojiankuohaophpcn 2; ++i) {
delete shapes[i];
}
return 0;}
注意事项与常见问题
使用抽象类时需要注意几点:
- 抽象类可以有构造函数,但不能实例化
- 派生类如果不实现所有纯虚函数,它自己也会成为抽象类
- 建议为抽象基类添加虚析构函数,防止资源泄漏
- 纯虚函数可以在基类中定义默认实现(少见但合法)
例如,下面这种写法是允许的:
virtual void func() = 0; // 在类外定义: void Base::func() { cout此时派生类仍需重写,但可以选择调用基类默认实现。
基本上就这些。纯虚函数和抽象类是C++面向对象设计的核心工具,合理使用能提升代码的可维护性和扩展性。










