我正在设计一个系统,但我尚未实现,我只是对其进行图解,然后对其进行编码,我想问一个简单的问题:

当我们同时使用继承和组合时该怎么办?

例如,在旅馆中,有两种房间标准间和双床间。为此,我可以使用继承概念,这两种类型的房间将成为派生类,但我也可以使用组成并将标准间和双床间设为单独的类,然后将其用作我的酒店类。

我该怎么办?

最佳答案

这个问题有点含糊,缺少许多细节,但我会分享一些想法...

第一件事:在设计应用程序时,最重要的是需求。

您首先需要尝试识别将在您的系统中具有某些含义的实体。假设您知道会有酒店和房间。请注意,此关系已经是一个组合,主要是因为:


房间只能是1家酒店的一部分,不能在多家酒店之间共享
一旦酒店被摧毁,里面的所有房间也都被摧毁


在C ++中,组合通常表示“按值”,即class Hotel可能具有Room room;,这将是一个具有自动存储持续时间的对象,其生存期与Hotel实例的生存期相关,您可以放置​​多个房间它们与向量产生相同的关系:

class Room { ... };

class Hotel {
public:
    std::vector<Room> rooms;
};


(顺便说一句,聚集很可能由指针或引用表示)。这是组成的另一个很好的例子:



如果您知道会有各种房间,那么第一个问题应该是:这些物体的行为是否不同?我的系统会以不同的方式对待他们吗? ...也许您不需要追求比Room更细的粒度,而具体房间的所有具体内容都将以其属性来表示-大小,床位数,也许数十个布尔型“ has”标志(“ has” aircon”,“有电视”,“有微波炉”,...),也许其所有属性都可以用简单的“类型”表示,您可以将其值放入enum中。

关于c++ - 组成继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22275075/

10-10 21:03