2つのクラスがあるとします。
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()
クラス(または関数)が別のクラスの特定のプライベートメンバーにのみアクセスを許可する方法はありますか?または、誰かが私の問題へのより良いアプローチを提案することができますか?
編集:
必要なアクセス制限を指定してみます。まず、Base
ライブラリ内のインターフェイスです(実際には抽象クラスです)。ユーザーは、から派生したクラスのみを使用しますBase
。ライブラリ内の別のクラスであるBase::f()
によってのみ呼び出されます。Foo
ユーザーから身を隠すBase::f()
ことは重要です。なぜなら、Foo
いつ呼び出すかしかわからないからです。同時に、Foo
の他のメンバーを台無しにしないでくださいBase
。