【发布时间】:2013-04-09 22:54:09
【问题描述】:
假设我有三个 C++ 类 FooA、FooB 和 FooC。
FooA 有一个名为Hello 的成员函数,我想在 FooB 类中调用此函数,但我不希望 FooC 类能够调用它。我能想出实现这一点的最好方法是将 FooB 声明为 FooA 的朋友类。但只要我这样做,所有 FooA 的私有成员和受保护成员都会暴露出来,这对我来说是非常不可接受的。
所以,我想知道C++(03或11)中是否有比friend类更好的机制可以解决这个难题。
如果可以使用以下语法,我认为会很好:
class FooA
{
private friend class FooB:
void Hello();
void Hello2();
private:
void Hello3();
int m_iData;
};
class FooB
{
void fun()
{
FooA objA;
objA.Hello() // right
objA.Hello2() // right
objA.Hello3() // compile error
ojbA.m_iData = 0; // compile error
}
};
class FooC
{
void fun()
{
FooA objA;
objA.Hello() // compile error
objA.Hello2() // compile error
objA.Hello3() // compile error
ojbA.m_iData = 0; // compile error
}
};
【问题讨论】:
-
不,据我所知没有这样的事情。