まず第一に、私はあなたの最後の文をよく理解していません.
C++ は、Y の x1 と y の実装がプライベートに利用できるように、3 番目のクラス Z が Y をサブクラス化することを許可しますが、外部の世界では X をパブリックに継承する、つまり単一のパブリック メソッド x2 しか持たないことだけを認識しますか?
がからパブリックZ
に継承する場合、とX
の両方が利用可能になります。x1
x2
x2
Z
Z
X
x2
そうは言っても、ヨハネスが指摘したように、からZ
プライベートに継承しY
たり、パブリックに継承したりすることもできますが、から2回継承するため、仮想継承を検討する必要があります。X
Z
X
必要に応じて、デコレータ パターンを調べることもできます(完全に無関係かもしれませんが、何らかの理由で、あなたの質問を読んで、それがあなたが達成したいことだと感じています)。
class X
{
public:
virtual void x1();
virtual void x2();
};
class Y : public X
{
public:
virtual void y();
virtual void x1();
};
class Z : public X
{
public:
explicit Z(X *x) : x_(x) {}
virtual void x1() { x_->x1(); }
virtual void x2() { x_->x2(); }
private:
X *x_;
};
int main()
{
Y y;
Z z(&y);
}
この簡単で汚いコード サンプルでZ
は、 X
(パブリック継承) でありながら、実装を再利用しています。 Y