С учетом следующего кода:
class Screen;
class WindowMgr
{
WindowMgr& relocateScreen( int r, int c, Screen& s);
};
class Screen
{
friend WindowMgr& WindowMgr::relocateScreen( int r, int c, Screen& s);
// ^ cannot access private member declared in class 'WindowMgr'
int m_nR,
m_nC;
};
WindowMgr& WindowMgr::relocateScreen( int r, int c, Screen& s)
{
s.m_nR = r;
s.m_nC = c;
return *this;
}
Почему класс Screen
не может объявить функцию-член WindowMgr::relocateScreen
как друга? Screen
не хочет использовать эту приватную функцию-член другого класса, а просто хочет, чтобы эта функция могла иметь доступ к своим собственным приватным членам.
Публикация функции relocateScreen
может быть плохим дизайном, если она предназначена только для использования в классе WindowMgr
. Точно так же, сделать Screen
другом WindowMgr
может быть плохим дизайном, если он не намерен обращаться к закрытым членам WindowMgr
в любом другом случае.
Где я здесь не так? Какой правильный подход? Я себя дурачу?