Предположим, что у меня есть три класса С++ FooA, FooB и FooC.
FooA имеет функцию-член с именем Hello
, я хочу вызвать эту функцию в классе FooB, но я не хочу, чтобы класс FooC мог ее вызвать. Лучший способ понять это - объявить FooB как класс друзей FooA. Но пока я это делаю, все частные и защищенные члены FooA будут выставлены, что для меня совершенно неприемлемо.
Итак, я хочу знать, есть ли какой-либо механизм в С++ (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
}
};