假设我们有两个类:
class Base
{
private:
int x;
public:
void f();
};
class Foo
{
// some variables and methods
};
现在每个人都可以打电话Base::f()
,但我只想Foo
能够这样做。
为了达到这个效果,我们可以设为Base::f()
private并声明Foo
为friend:
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
。