面试题答案
一键面试1. 多态与接口设计
在设计 Shape
抽象类接口时,为实现多态,需将绘图相关方法设计为虚函数或纯虚函数。多态通过基类指针或引用调用派生类重写的方法来实现。例如,有一个绘制方法 draw
,不同图形(Circle
、Rectangle
等)有不同绘制逻辑,因此 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
抽象类接口与多态实现紧密结合,不同具体图形类可正确且高效地重写接口方法实现各自绘制逻辑。