[編集] 意図[編集] 多重継承なしに複数のインタフェースを実装し、さらに自然に見えるアップキャストを提供する。 単一の抽象化で同一インタフェースに対する複数の実装を提供する。 別名[編集] 動機[編集] 2つの独立したクラスライブラリによって提供される、 2つの独立したインタフェース中の仮想関数のシグネチャが 衝突する可能性がある。 特に、単一のクラスにおいてその衝突した関数を、 対象とするインタフェース毎に異なる方法で実装する必要がある場合、問題になる。 例えば、 class Base1 /// Moon によって提供 { public: virtual int open (int) = 0; /* virtual */ ~Base1() {} // 多態的な delete が禁止されている }; class Base2 /// Jupitor によって提供 { public: vir