MST

星途 面试题库

面试题:C++中抽象类的纯虚函数应用场景

请阐述在C++中,抽象类里纯虚函数通常会在哪些实际应用场景中使用,并举例说明。
47.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

实际应用场景

  1. 创建通用接口:当需要定义一组相关类的通用操作接口,但具体实现因类而异时,可在抽象类中使用纯虚函数。例如在图形绘制系统中,不同图形(如圆形、矩形、三角形)都有绘制操作,但绘制方式不同。
  2. 模板方法模式:在设计模式中,抽象类定义算法的框架,通过纯虚函数让子类实现特定步骤。比如文件处理流程,抽象类定义打开、读取、处理、关闭文件的框架,子类根据文件类型(如文本文件、二进制文件)实现具体读取和处理操作。
  3. 强制子类实现特定行为:确保继承该抽象类的所有子类都实现某些关键功能,否则编译不通过。如游戏角色类,所有角色都必须有移动和攻击行为,在抽象角色类中定义为纯虚函数,子类具体角色(战士、法师等)实现这些行为。

示例代码

#include <iostream>

// 抽象图形类
class Shape {
public:
    // 纯虚函数,用于绘制图形
    virtual void draw() const = 0;
};

// 圆形类,继承自Shape
class Circle : public Shape {
public:
    void draw() const override {
        std::cout << "绘制圆形" << std::endl;
    }
};

// 矩形类,继承自Shape
class Rectangle : public Shape {
public:
    void draw() const override {
        std::cout << "绘制矩形" << std::endl;
    }
};

int main() {
    // 不能直接创建抽象类Shape的对象
    // Shape s; // 这会导致编译错误

    // 创建具体图形对象
    Circle c;
    Rectangle r;

    // 通过基类指针调用draw函数,实现多态
    Shape* shapes[2] = {&c, &r};
    for (int i = 0; i < 2; ++i) {
        shapes[i]->draw();
    }

    return 0;
}

在上述代码中,Shape类是抽象类,其中draw函数为纯虚函数。CircleRectangle类继承自Shape并实现了draw函数,通过Shape类指针调用draw函数展示了多态性。