次のコードがあるとします。
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
ここでどこが間違っていますか?正しいアプローチは何ですか?私は自分を馬鹿にしていますか?