纯虚函数必须在声明末尾写=0且无函数体,含纯虚函数的类为抽象类不可实例化,但可定义指针或引用实现多态;派生类未重写所有纯虚函数仍为抽象类;纯虚函数可有默认实现,但调用需显式作用域限定。
纯虚函数的定义语法必须带 = 0
在 C++ 类中声明纯虚函数,核心是函数声明末尾加上 = 0,且该函数不能有函数体(哪怕写成 {} 也会编译失败)。它只出现在类定义内部,用于表明该函数必须由派生类实现。
常见错误包括:
- 漏掉
= 0,结果变成普通虚函数,基类可实例化,失去抽象约束 - 在类内写了函数体,如
virtual void foo() = 0 { },编译器直接报错 - 把
= 0写在函数声明之外,比如放在注释后或换行后,会被视为语法错误
正确写法示例:
class Shape {
public:
virtual double area() const = 0; // ✅ 纯虚函数
virtual ~Shape() = default;
};
含纯虚函数的类自动成为抽象类
只要一个类中至少有一个纯虚函数,该类就不可实例化——即使其他所有函数都已实现。这不是靠关键字 abstract 控制(C++ 没这关键字),而是语言规则强制的。
使用场景上要注意:
立即学习“C++免费学习笔记(深入)”;