MST

星途 面试题库

面试题:C++多态如何在类继承体系中提升代码维护性

请描述在一个具有基类和多个派生类的C++类继承体系中,多态是如何提高代码维护性的,并举例说明。例如,假设存在一个`Shape`基类,有`Circle`和`Rectangle`派生类,在绘图函数中如何利用多态来简化维护?
36.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 多态提高代码维护性的原理
    • 灵活性:在类继承体系中,多态允许通过基类指针或引用调用派生类的重写函数。这意味着当有新的派生类加入时,无需修改现有调用代码。例如,若在Shape类体系中新增Triangle派生类,绘图函数无需修改,只要Triangle重写了绘图相关函数,就能无缝融入系统。
    • 代码复用:基类可以定义通用接口,派生类根据自身特点实现这些接口。这减少了重复代码,使代码结构更清晰,维护时只需在一处修改通用逻辑(基类)或特定逻辑(派生类)。
  2. 举例说明
#include <iostream>
// 基类Shape
class Shape {
public:
    virtual void draw() const {
        std::cout << "Drawing a shape" << std::endl;
    }
};
// 派生类Circle
class Circle : public Shape {
public:
    void draw() const override {
        std::cout << "Drawing a circle" << std::endl;
    }
};
// 派生类Rectangle
class Rectangle : public Shape {
public:
    void draw() const override {
        std::cout << "Drawing a rectangle" << std::endl;
    }
};
// 绘图函数,利用多态简化维护
void drawShapes(const Shape* shapes[], int numShapes) {
    for (int i = 0; i < numShapes; ++i) {
        shapes[i]->draw();
    }
}
int main() {
    Circle circle;
    Rectangle rectangle;
    const Shape* shapes[2] = {&circle, &rectangle};
    drawShapes(shapes, 2);
    return 0;
}

在上述代码中,drawShapes函数接收一个Shape指针数组。无论数组中是CircleRectangle还是未来可能添加的其他Shape派生类对象的指针,drawShapes函数都能正确调用相应的draw函数,无需为每种派生类单独编写绘图逻辑,大大简化了维护。如果需要修改绘图逻辑,只需在相应派生类的draw函数中修改即可。