【发布时间】:2010-07-21 19:57:41
【问题描述】:
给定以下代码:
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 不想使用另一个类的这个私有成员函数,而只是希望该函数能够访问它自己的私有成员。
如果只打算在WindowMgr 类中使用,将relocateScreen 函数公开可能是糟糕的设计。同样,将Screen 设为WindowMgr 的朋友可能是一个糟糕的设计,如果在其他情况下不打算访问WindowMgr 的私有成员。
我哪里错了?什么是正确的方法?我是在自欺欺人吗?
【问题讨论】:
标签: c++ private friend member-functions