抽象基类通常包含至少一个纯虚函数,即一个没有具体实现的虚函数,通过在基类中声明纯虚函数,它强制派生类提供这个函数的具体实现。
通过在类的声明中使用 virtual
关键字和 = 0
初始化来创建纯虚函数,这样的类就成为抽象基类。以下是一个示例:
class Shape {
public:// 纯虚函数,使得Shape成为抽象基类virtual void draw() const = 0;// 其他虚函数virtual double area() const {return 0.0;}// 普通成员函数void displayInfo() const {// ...}
};
让我们对 virtual void draw() const = 0;
这行代码的每个部分进行简单的介绍:
-
virtual
关键字:virtual
是 C++ 中用于声明虚函数的关键字。
-
void
:void
是函数的返回类型,表示该函数不返回任何值。
-
draw()
:draw
是函数的名称,这里是虚函数的名称。
-
const
关键字:const
是常量修饰符,表示该函数不会修改调用对象的成员变量。- 这种声明方式可以使得常量对象也能够调用这个函数。
-
= 0
:= 0
是在声明中虚函数的方式,表示这是一个纯虚函数。- 纯虚函数是没有实际实现的虚函数,要求任何派生类必须提供自己的实现。
- 类中有纯虚函数的类称为抽象基类,不能被实例化,只能被用作其他类的基类。
所以,virtual void draw() const = 0;
表示这是一个虚函数 draw
,它是一个纯虚函数,没有具体的实现,而且它不会修改调用对象的状态。
在这个例子中,Shape
就是一个抽象基类,它包含一个纯虚函数 draw()
。任何继承自 Shape
的派生类都必须提供 draw()
的具体实现。
int main() { // 错误,不能实例化抽象类 // Shape shape; // Shape的纯虚函数draw()必须在派生类中实现return 0; }
抽象基类的目的是为了提供一个通用的接口,使得不同的派生类能够共享相似的行为,并通过多态性实现对这些不同派生类的统一处理。