Gra*_*her 10 c++ oop inheritance composition
我有一个C++类来描述3D空间中对象的方向 - 位置,旋转,缩放等.我有其他类需要这样的信息(或其中的一部分) - 模型,地形,相机等.现在我可以创建我的方向类的子类,但谷歌告诉我更喜欢组合而不是继承.这种哲学是有道理的-一个模型是不是一个方向,它有一个(是的,我知道的就是,一个过一件事只是一个启发式).然而,对于所有那些可能的子类重写相同的包装器方法似乎是不必要的,几乎完全不太优雅,只需要获得该功能.事情model.getOrientation().set_x(1)似乎也很愚蠢.
我可以看出为什么这对于小对象来说不会"太糟糕",但是对于这个例子(以及其他类似的例子),如果你不得不通过箍来假装你正在使用继承,那么构成的重点是什么?我现在应该使用它吗?我几乎可以肯定我正在考虑这个问题.
小智 6
这可能看起来很愚蠢,但你model.getOrientation().set_x(1)可能还是要走的路.
如果您厌倦了键入getOrientation()部件,您可以尝试这样的事情:
Orientation & orient = model.getOrientation();
orient.set_x(1);
orient.set_y(1);
if( orient.check_something() ) {
//whatever
}
//etc.
Run Code Online (Sandbox Code Playgroud)
有一种廉价的方法可以避免大部分包装样板.
class model : private orientation {
public:
using orientation::set_x;
... etc ...
};
Run Code Online (Sandbox Code Playgroud)
C++中的私有继承(并不一定)意味着"是一个".它对外人来说或多或少是不可见的,有时被描述为"以"来实现".也就是说,您将获得有限形式的合成,这有助于您展示组合对象的部分或全部接口.