我正在设计一个系统,但我尚未实现,我只是对其进行图解,然后对其进行编码,我想问一个简单的问题:
当我们同时使用继承和组合时该怎么办?
例如,在旅馆中,有两种房间标准间和双床间。为此,我可以使用继承概念,这两种类型的房间将成为派生类,但我也可以使用组成并将标准间和双床间设为单独的类,然后将其用作我的酒店类。
我该怎么办?
最佳答案
这个问题有点含糊,缺少许多细节,但我会分享一些想法...
第一件事:在设计应用程序时,最重要的是需求。
您首先需要尝试识别将在您的系统中具有某些含义的实体。假设您知道会有酒店和房间。请注意,此关系已经是一个组合,主要是因为:
房间只能是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/