面试题答案
一键面试- 多态提高代码维护性的原理:
- 灵活性:在类继承体系中,多态允许通过基类指针或引用调用派生类的重写函数。这意味着当有新的派生类加入时,无需修改现有调用代码。例如,若在
Shape
类体系中新增Triangle
派生类,绘图函数无需修改,只要Triangle
重写了绘图相关函数,就能无缝融入系统。 - 代码复用:基类可以定义通用接口,派生类根据自身特点实现这些接口。这减少了重复代码,使代码结构更清晰,维护时只需在一处修改通用逻辑(基类)或特定逻辑(派生类)。
- 灵活性:在类继承体系中,多态允许通过基类指针或引用调用派生类的重写函数。这意味着当有新的派生类加入时,无需修改现有调用代码。例如,若在
- 举例说明:
#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
指针数组。无论数组中是Circle
、Rectangle
还是未来可能添加的其他Shape
派生类对象的指针,drawShapes
函数都能正确调用相应的draw
函数,无需为每种派生类单独编写绘图逻辑,大大简化了维护。如果需要修改绘图逻辑,只需在相应派生类的draw
函数中修改即可。