0

私はこのようなインターフェースを持っています

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

デバイス間の互換性を確認できるように、すべてのクラスで上記のインターフェイスがサポートされている必要があります。そのために、上記の IVersion クラスから各デバイスをパブリックに継承します。

IVersion (および Liskov Substitution Principle) から継承しているため、デバイスバージョンであることを意味します。しかし、私が望む実際の関係は、デバイスバージョンがあるということです。

IVersion のようにすべてのデバイスでメソッドをサポートしたいのですが、私が行った方法は正しくないと思います。誰かがより良い方法を提案できますか? コンポジションを使用できますが、IVersion のメソッドをデバイスの基本クラスに追加し、内部で IDevice 実装を使用する必要があります。これは私が達成したいことをするための最良の方法ですか?

4

1 に答える 1

1

クラスには仮想メソッドがあるため、IVersionそれらをオーバーライドする必要があるようです(現在または将来)。したがって、この場合、コンポジションよりもプライベート継承の方が適しています。

于 2015-01-27T16:32:01.697 に答える