【发布时间】:2013-06-04 05:08:31
【问题描述】:
我有一个 C++ 类,它描述了对象在 3D 空间中的方向 - 位置、旋转、缩放等。我还有其他类必须需要类似的信息(或其子集) - 模型、地形、相机等等。现在我可以创建我的方向类的这些子类,但谷歌告诉我更喜欢组合而不是继承。这在哲学上是有道理的——模型是不是一个方向,它有一个(是的,我知道is-a has-a只是一种启发式)。然而,为所有那些可能的子类重写相同的包装方法似乎是不必要的,几乎是可笑的不雅,只是去获得那个功能。 model.getOrientation().set_x(1) 之类的东西似乎也很愚蠢。
我明白为什么这对于小物体来说不会“太糟糕”,但是对于这个例子(以及其他类似的例子),如果你必须通过箍来假装,那么构图的意义何在你正在使用继承?我现在应该使用它吗?我几乎可以肯定我在考虑这个问题。
【问题讨论】:
-
model.orientation.set_x(1)有什么问题? -
@Lol4t0 看起来很冗长。另外,你不应该只是能够告诉一个对象做某事而无需拆卸它,可以这么说吗?也许类似的设计模式实例会有所帮助?
-
问题是设置方向并不是告诉对象要做什么(如果对象不是方向)。那!实际上是一个问题。您不应该为对象设置方向,而应该用他们的术语与他们交谈,例如
monster->attack()或camera->zoom()。
标签: c++ oop inheritance composition