0

他の部分を隠しながら、基本クラスの特定の部分のみを使用しようとしています。次のコードを検討してください。

struct IX
{
    // ...
};

struct IY
{
    // ...
};

class Base :
    public IX,
    public IY
{
    // Implements IX and IY.
    // ...
};


// Reuse IX implementation, but don't expose IY.
//
class X : protected Base
{
public:
    using Base::IX; // <-- Doesn't exist in C++.
};

IXによって提供される実装を楽しむことができますが、インターフェイスBaseを公開する必要はありませんか?IY

もちろん、 にusing Base::IX::xxx存在するすべてのメソッドを入力できIXます。または、次のようにすべての呼び出しを実装に転送することもできます。

//
class X : public IX
{
public:
    // Forward all calls to IX methods to m_p.
    // ...

protected:
    Base* m_p;
};

しかし、繰り返しますが、転送するには、使用可能なすべてのメソッドを入力する必要がありIXます。そして、変更されるたびIXに、更新する必要がありますX

ありがとう。

アレックス

4

1 に答える 1

0

さて基本的にの実装IXとあなたのIYで保護されていますclass X。アクセサーと修飾子をクラス内のパブリックメソッドとして公開できます。

別のアプローチは、BaseからIXを公開することです。

class Base : public IX, protected IY
{
    // Implements IX and IY.
    // ...
    // Expose access to IY through base for the class 
    // inheriting from Base
};

class X : public Base 

もう1つの可能性は、継承するのではなく、IXそれらIYをパブリックメンバーとして保持することBaseです。

class Base
{
public:
    IX member1;
    IY member2;
};

class Xこのようにして、Baseから保護的に継承し、 forから単一のアクセサーと修飾子メソッドを公開できますmember1

于 2012-11-12T06:33:38.653 に答える