2010-12-19 5 views
1

私はclass Aしか持っていませんが、プライベートメンバー(包括的なデータ、メソッド、コンストラクタ、デストラクタなど)を持っています。また、私はclass Aの友人であるclass Bを持っています。そして私はすべての派生クラスB(Bから継承されたテンプレートもあります)をclass Aの友人にしたいと思います。これを行う方法はありますか?フレンドクラスの階層を作るには?

+1

理由]]]]]]]]]]] –

+1

はい。メンバーを 'private'の代わりに' protected'にしましょう。 –

+0

私は他のクラスがB(および派生)がA型のインスタンスを作成および管理できると期待していないためです。 –

答えて

1

C++ではこれを直接サポートしていません。"a kid of my friend is not my friend"

これを実装するには別の方法を使用する必要があります。例えば、class Bで保護されたアクセサ関数の集合を定義する:class Aが非常に小さい場合にのみ実現可能である

class A {friend class B; int x, y}; 

class B 
{ 
protected: 
    int& AccessX(A& a) {return a.x;} 
    int& AccessY(A& a) {return a.y;} 
} 

class Aが大きい場合は、class Bとその派生クラスをclass Aとしたいと思って、それを一連の関数として表現する必要があります。 class Bで保護された機能として、これらを定義します。

class A 
{ 
    A(): x(42), y(99) {} 
    friend class B; 
    int x, y; 
} 

class B 
{ 
protected: 
    A Create() {return A();} 
    void Manage(A& object) {object.x += 1; object.y += 2;} 
} 
+2

クラスBで何も使用しないので、アクセス関数を静的にすることは意味があります。 –