作为 C++ 程序员,我学到的一个重要且基本的规则是组合优先于继承 ( http://en.wikipedia.org/wiki/Composition_over_inheritance )。
我完全同意这条规则,它使事情比我们使用继承要简单得多。
我有一个应该使用 Composition 解决的问题,但我真的很难做到这一点。
假设您有一台 Vendor Machine,并且您有两种类型的产品:
- 离散产品 - 像零食。
- 流体产品 - 如饮料。
这两种类型的产品需要在一个名为 VendorCell 的类中表示,该类包含单元格内容。
这两种产品共享一些相同的属性(dm),如价格、数量等......但也包含一些不同的属性。
因此,在此处使用 Composition 可能会导致以下结果:
class VendorCell {
private : // default access modifier
int price;
int quantity;
// int firstProductAttributeOnly
// char secondProductAttributeOnly
};
如您所见,注释行表明,对于单个 VendorCell 取决于它包含的产品,这两个注释行中只有一个是重要且可用的(另一行仅与其他类型相关 - 例如流体)。
因此,我可能有一个 VendorCell,里面有零食,并且不需要它的 secondProductAttributeOnly。
组合(对于 VendorCell)是正确的解决方案吗?对你们来说,有人会通过构造函数来确定 VendorCell 类型,而一个 DM(专用于另一种类型的 DM)根本不会被使用(例如,将其标记为 -1),这对你们来说是否合适?>
谢谢大家!