0

我有这样的界面

class IVersion
{
public:
   virtual char * get_version() const  = 0;
   virtual bool is_compatible(const IVersion& other) const = 0;
};

我有一组“设备”类,所有这些类都需要支持上述接口,以便我可以检查设备之间的兼容性。为此,我从上述 IVersion 类公开继承了每个设备。

现在,由于我继承自 IVersion(以及 Liskov 替换原则),这意味着设备版本。但我想要的实际关系是设备有一个版本。

我希望所有设备都支持 IVersion 中的方法,但我认为我这样做的方式是不正确的。任何人都可以提出更好的方法吗?我可以使用组合,但是现在我需要在 IVersion 中添加方法,将其添加到设备基类中,然后在内部使用 IDevice 实现。这是完成我想要实现的目标的最佳方式吗?

4

1 回答 1

1

由于您的类中有虚拟方法IVersion,因此您似乎可能需要覆盖这些方法(现在或将来)。因此,在这种情况下,私有继承组合的更好替代方案。

于 2015-01-27T16:32:01.697 回答