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