gpt4 book ai didi

c++ - 管理类的聚合/组合成员之间的关系

转载 作者:搜寻专家 更新时间:2023-10-31 02:01:13 24 4
gpt4 key购买 nike

我正在使用聚合和组合为模拟创建实体。

在下面的 C++ 示例中:

class CCar
{
CCar( CDriver* pDriver )
{ m_pDriver = pDriver; }

CDriver* m_pDriver;

CEngine m_Engine;

CDriverControls m_Controls;
};

在上面的例子中,一辆汽车由一个引擎和一组驾驶控制(按组成)组成。汽车还必须有司机(通过聚合)。

但这只是解释了等级关系——司机属于汽车,发动机和控制装置也属于汽车。但是这些成员也都相互关联——驾驶员必须对控件执行操作,控件必须对引擎执行操作。这些关系也适用于多个方向——发动机可能会熄火并导致控制装置卡住,或者控制装置可能会疯狂旋转并伤害驾驶员?如果司机不喜欢发动机的声音而离开了汽车怎么办?这些关系如何运作?

我正在从许多不同的对象中合成许多不同的实体,这些对象经常与其他对象交互,并且对如何以设计的方式管理这些关系很感兴趣。

谢谢!

编辑:

如回复所示,一种管理方法是将汽车指向驾驶员,并为驾驶员提供指向汽车的指针等。这很有意义并解决了这个具体示例。然而,在设计意义上,这增加了司机的责任,这个对象的任务是跟踪它属于哪辆车,但肯定这是容器的责任来跟踪哪些对象属于一起?同样,让 CCar 管理这些关系会将 CCar 变成一个 blob。是否有专门的解决方案来处理这些类型的关系?

最佳答案

您将它们构建到每个类的方法中。您所描述的是每个类(class)的行为。您的要求表明这种关系也是双向的。您的 Controls 类将具有采用 Engine 参数并调用其方法的方法。发动机将对其 RPM、HP、扭矩等进行限制,由 Controller 操纵,这些限制将内置于它们中(例如,“如果你的 RPM 降得太低,失速”)。

这不仅仅是组合。您将行为和规则构建到方法中。这些方法可能采用表达您需要的参数。

关于c++ - 管理类的聚合/组合成员之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/932435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com