假设我有以下类结构:
class Car;
class FooCar : public Car;
class BarCar : public Car;
class Engine;
class FooEngine : public Engine;
class BarEngine : public Engine;
让我们也给它Car一个句柄Engine。AFooCar将由 a 创建,FooEngine*aBarCar将由 a 创建BarEngine*。有没有办法安排事情,以便FooCar对象可以调用成员函数而FooEngine无需向下转换?
这就是为什么类结构按现在的方式布局的原因:
- 所有
Cars 都有一个Engine. 此外, aFooCar只会使用 aFooEngine。 - 所有
Engines 共享的数据和算法我宁愿不复制和粘贴。 - 我可能想编写一个需要
Engine知道它的函数Car。
在编写这段代码时,我一打字dynamic_cast就知道我可能做错了什么。有一个更好的方法吗?
更新:
根据目前给出的答案,我倾向于两种可能性:
- 已经
Car提供了一个纯虚getEngine()函数。这将允许FooCar并BarCar拥有返回正确类型的Engine. Engine将所有功能吸收到Car继承树中。Engine出于维护原因(将这些Engine东西保存在一个单独的地方)。这是拥有更多小类(小代码行)与拥有更少大类之间的权衡。
社区是否对其中一种解决方案有强烈的偏好?有没有我没有考虑过的第三种选择?