纯虚函数是C++中用于实现抽象类(Abstract Class)的一个重要概念。抽象类是一种不能被实例化的类,它主要用于为派生类提供一个公共的接口。
纯虚函数在基类中被声明,但没有在基类中实现(即没有函数体),它的目的是强制要求派生类必须实现这个函数。
1、定义纯虚函数
class Shape
{
public:
// 纯虚函数声明
virtual void draw() const = 0;
// 其他成员函数
};
// 注意:包含纯虚函数的类不能被实例化
// Shape s; // 这会导致编译错误
由于Shape
类中至少有一个纯虚函数,所以Shape
是一个抽象类,不能被直接实例化。
2、派生类中的实现
当从抽象类派生新类时,派生类必须实现基类中所有的纯虚函数,除非派生类本身也是抽象类(即它也包含了至少一个纯虚函数)。
class Circle : public Shape
{
public:
// 实现基类中的纯虚函数
void draw() const override
{
// 绘制圆的代码
std::cout << "Drawing a circle" << std::endl;
}
};
// 现在可以创建Circle类的实例了 ,画一个圆
Circle c;
c.draw(); // 输出:Drawing a circle
在这个例子中,Circle
类从Shape
类派生,并实现了Shape
类中声明的纯虚函数draw()
。因此,Circle
不是抽象类,可以被实例化,并可以调用其draw()
成员函数。
3、使用纯虚函数的好处
- 强制派生类实现特定的接口:通过定义纯虚函数,可以确保所有从抽象类派生的类都实现了一个共同的接口。
- 实现多态:纯虚函数是实现多态的基础,允许通过基类类型的指针或引用来调用派生类中的具体实现。
- 设计上的灵活性:抽象类提供了一种设计上的灵活性,使得可以在不修改现有代码的情况下,通过添加新的派生类来扩展系统。