类和对象-多态-纯虚函数和抽象类

纯虚函数(pure virtual function)是一个在基类中声明的虚函数,它没有函数体,只有声明。纯虚函数通过在函数声明的结尾处使用 = 0 来标识。纯虚函数的存在使得基类成为一个抽象类(abstract class),这意味着不能直接实例化该类,而只能用作其他类的基类,提供接口规范。

语法:

class Base {
public:
    virtual void virtualFunction() = 0; // 纯虚函数声明
    // 其他成员函数和成员变量
};

特点和使用场景:

  1. 纯虚函数声明:
  • 在声明纯虚函数时,必须在函数末尾使用 = 0,表示该函数是纯虚函数。
  1. 抽象类:
  • 包含至少一个纯虚函数的类被称为抽象类。抽象类不能直接实例化为对象,只能用作其他类的基类。
  1. 派生类实现:
  • 任何派生自抽象类的具体类,必须实现(覆盖)所有继承的纯虚函数,才能成为一个具体类(可以实例化的类)。
  1. 虚析构函数:
  • 如果基类包含纯虚函数,则通常建议为其提供一个虚析构函数。例如:
    virtual ~Base() {}
    
    这样做是为了确保通过基类指针释放派生类对象时,能正确调用派生类的析构函数。

示例:

class Shape {
public:
    virtual void draw() const = 0; // 纯虚函数
    virtual ~Shape() {} // 虚析构函数
};

class Circle : public Shape {
public:
    void draw() const override {
        // 实现圆形的绘制
    }
};

class Square : public Shape {
public:
    void draw() const override {
        // 实现正方形的绘制
    }
};

int main() {
    // Shape shape; // 错误,不能实例化抽象类
    Circle circle;
    Square square;

    Shape* ptrShape1 = &circle;
    Shape* ptrShape2 = □

    ptrShape1->draw();
    ptrShape2->draw();

    return 0;
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 23:08:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 23:08:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 23:08:03       58 阅读
  4. Python语言-面向对象

    2024-07-17 23:08:03       69 阅读

热门阅读

  1. 建筑产业网元宇宙的探索与实践

    2024-07-17 23:08:03       21 阅读
  2. 微信小程序加载动画文件

    2024-07-17 23:08:03       26 阅读
  3. 刷题记录:LeetCode 925.长按键入

    2024-07-17 23:08:03       22 阅读
  4. 实际项目中JVM调优

    2024-07-17 23:08:03       18 阅读
  5. 如何做到思维的顺畅运行

    2024-07-17 23:08:03       20 阅读
  6. Linux下Supervisor的安装与配置

    2024-07-17 23:08:03       18 阅读
  7. 布儒斯特定律

    2024-07-17 23:08:03       17 阅读