MST

星途 面试题库

面试题:C++抽象类接口设计与多态实现的关联

假设你正在设计一个图形绘制的C++框架,其中有抽象类Shape作为所有图形类的基类。请阐述在设计Shape抽象类接口时,如何考虑与多态实现的紧密结合,以确保不同具体图形类(如Circle、Rectangle等)能正确且高效地重写接口方法来实现各自的绘制逻辑。同时,说明在这个过程中纯虚函数和虚函数的合理使用策略。
33.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

1. 多态与接口设计

在设计 Shape 抽象类接口时,为实现多态,需将绘图相关方法设计为虚函数或纯虚函数。多态通过基类指针或引用调用派生类重写的方法来实现。例如,有一个绘制方法 draw,不同图形(CircleRectangle 等)有不同绘制逻辑,因此 draw 方法在 Shape 抽象类中应被声明为虚函数或纯虚函数。这样,通过 Shape 指针或引用调用 draw 方法时,实际调用的是派生类重写后的 draw 方法,从而实现多态。

2. 纯虚函数使用策略

  • 定义:纯虚函数是在基类中声明但没有实现的虚函数,语法上在函数声明后加上 = 0
  • 适用场景:当基类中无法给出有意义的默认实现时使用纯虚函数。例如,Shape 类本身无法确定如何绘制,具体绘制逻辑由派生类实现,此时 draw 方法应设为纯虚函数。这样可强制派生类重写该方法,否则派生类也将成为抽象类,无法实例化。例如:
class Shape {
public:
    virtual void draw() const = 0;
};

3. 虚函数使用策略

  • 定义:虚函数在基类中有默认实现,派生类可选择重写。
  • 适用场景:当基类中有一些通用逻辑可作为默认实现,部分派生类可直接使用,部分派生类可根据自身需求重写时使用虚函数。例如,Shape 类可能有一个获取图形颜色的方法 getColor,大多数图形可能有一个默认颜色,可在 Shape 类中给出默认实现,而某些特殊图形若有不同颜色获取逻辑,可重写该方法。例如:
class Shape {
public:
    virtual std::string getColor() const {
        return "default_color";
    }
};

通过合理使用纯虚函数和虚函数,能确保 Shape 抽象类接口与多态实现紧密结合,不同具体图形类可正确且高效地重写接口方法实现各自绘制逻辑。