Предположим, у меня есть три класса 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
}
};
Нет, нет такой вещи, насколько я знаю. –
@summereno: Так может друг, и они с большей вероятностью это сделают. –