继承C ++接口和LSP违规

时间:2015-01-27 16:20:49

标签: c++ liskov-substitution-principle

我有这样的界面

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

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

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

我希望所有设备都支持IVersion中的方法,但是我的方式我认为是不正确的。有谁能建议更好的方法?我可以使用组合,但后来我需要在IVersion中添加方法,进入设备基类,然后在内部使用IDevice实现。这是我想要实现的最佳方式吗?

1 个答案:

答案 0 :(得分:1)

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