![]() |
1
25
当然,为什么不呢?既然我喜欢机器人,让我们制作一个可以四处走动和抓取东西的机器人。我们将使用继承制作一个机器人,使用合成制作另一个机器人:
请注意,至少在本例中
|
![]() |
2
12
要稍微扩展一下JeremyFriesner的答案(并且主要重用他的代码),很多时候合成是使用更多的类来实现的。Legs和Arms类本质上是接口的实现。这使得注入这些依赖关系变得很容易,因此,在对复合对象进行单元测试时,可以模拟/剔除它们。然后您会得到类似的结果(忽略虚拟析构函数…):
因此,腿部和手臂的实际实现可以在运行时而不是编译时设置。 顺便说一句,我写这篇文章只是作为一个答案,而不是对Jeremy的答案发表评论,以从代码格式中获益。因此,如果你想投票,请也投票给Jeremy。 HTH公司 2021年9月14日更新: 在这个答案中,我注意到一件事,那就是我把合成和聚合混为一谈了。在合成中,如果父对象不再存在,那么子对象也会不存在,而在聚合中,子对象可能在父对象被销毁后存在。在我给出的描述中,对子对象实例的引用在CompositionRobot构造函数中传递,这意味着聚合关系而不是组合。但是,如果在定义参数和创建对象时使用std::unique\u ptr(),在将对象存储在CompositionRobot的构造函数中时使用std::move(),其效果将与Jeremy的回答中的效果非常相似,在Jeremy的回答中,对象(而不是指针或对它们的引用)被定义为类成员。 |
![]() |
iasonas · 如何检查自定义注释? 5 月前 |
![]() |
Svyat · 如何创建一个类设置,其中两个类各包含另一个类的实例? 6 月前 |
![]() |
F-22 Destroyer · 遇到super()问题 10 月前 |
|
simply lemon · python上链表的添加方法 11 月前 |
![]() |
Minty · 自定义类中使用numpy数组进行左加法/右加法的不同行为 11 月前 |