我々は二つのクラスがあるとします。クラスを他のクラスの特定のプライベートメンバーにしかアクセスできないようにするにはどうすればいいですか?
class Base
{
private:
int x;
public:
void f();
};
class Foo
{
// some variables and methods
};
を今すぐ誰もがBase::f()
を呼び出すことができますが、私は唯一のFoo
がそうすることができるようにしたいです。
この効果を達成するために、我々はBase::f()
をプライベートにすることができますし、友人としてFoo
を宣言:
class Base
{
private:
int x;
void f();
friend Foo;
};
このアプローチの問題はFoo
は両方Base::f()
とBase::x
(とさえへのへのアクセス権を持っているということですその他の私的会員はBase
です)。しかしFoo
にはBase::f()
へのアクセス権が必要です。
クラス(または関数)が別のクラスの特定のプライベートメンバーにのみアクセスを許可する方法はありますか?あるいは、誰かが私の問題に対してより良いアプローチを提案できますか?
EDIT:
私は私が必要とするアクセス制限を指定しようとするでしょう。まず、Base
はライブラリ内のインターフェイスです(実際は抽象クラスです)。ユーザーはBase
から派生したクラスのみを使用します。 Base::f()
は、ライブラリ内の別のクラスであるFoo
によってのみ呼び出されます。 Base::f()
をユーザーから隠すことは、いつ呼び出すかを知っているのはFoo
なので、重要です。同時に、Foo
はBase
の他のメンバーを台無しにすべきではありません。あなたはこのようなBase
のデータを含む別のクラスを作成することができます
'f()'を保護し、保護された継承を使用することができます。 – chris
しかし 'Foo'は' Base'から派生したものではありません。 – miloszmaki
それは単なる考えだった。あなたはそれを派生させる必要があります。 'BaseData'の答えを見た後、私はそれに行くだろう。 – chris