纯虚函数是声明时赋值为0的虚函数,语法为virtual 返回类型 函数名() = 0;2. 含纯虚函数的类为抽象类,不能实例化,只能被继承;3. 子类必须实现纯虚函数,否则仍无法实例化;4. Drawable接口定义了draw()纯虚函数,用于规范可绘制对象的行为;5. Circle类继承Drawable并重写draw()函数以实现具体绘制逻辑。

在C++中,接口通常通过抽象类来实现。抽象类是包含至少一个纯虚函数的类,不能被实例化,只能被继承。子类必须实现这些纯虚函数,否则也无法实例化。
什么是纯虚函数
纯虚函数是在基类中声明但不提供实现的虚函数,由派生类具体实现。语法格式为:
virtual 返回类型 函数名() = 0;带有纯虚函数的类就是抽象类。
定义接口(抽象类)
假设我们要定义一个“可绘制”对象的接口,可以这样写:
立即学习“C++免费学习笔记(深入)”;
class Drawable {public:
virtual void draw() const = 0; // 纯虚函数
virtual ~Drawable() = default; // 虚析构函数很重要
};
这个Drawable类就是一个接口,任何想成为“可绘制”的类都必须继承它并实现draw()函数。
实现接口(继承并重写纯虚函数)
比如我们有两个图形:圆形和矩形,它们都可以绘制:
class Circle : public Drawable {public:
void draw() const override {
std::cout }
};
class Rectangle : public Drawable {
public:
void draw() const override {
std::cout }
};
这两个类都实现了draw()函数,因此可以被实例化,并当作Drawable使用。
使用多态调用接口方法
通过基类指针或引用,可以实现运行时多态:
#include#include
#include
int main() {
std::vector<:unique_ptr>> shapes;
shapes.push_back(std::make_unique
shapes.push_back(std::make_unique
for (const auto& shape : shapes) {
shape->draw(); // 调用各自实现
}
return 0;
}
输出结果:
Drawing a circle.Drawing a rectangle.
关键点总结
- 抽象类用纯虚函数(
= 0)定义接口 - 不能直接实例化抽象类
- 派生类必须实现所有纯虚函数,否则仍是抽象类
- 建议为抽象类提供虚析构函数,防止资源泄漏
- 通过指针或引用实现多态调用
基本上就这些。C++没有像Java那样的interface关键字,但通过抽象类完全可以实现类似效果。











