假设我们有两大类:如何让一个班级只能访问其他班级的某些私人成员?
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
的其他成员。
您可以使'f()'受保护,并使用受保护的继承我认为。 – chris
但'Foo'不是从'Base'派生的。 – miloszmaki
这只是一个想法。你必须得到它。看到“BaseData”答案后,我会继续这样做。 – chris