7

これは合法ですか?そうでない場合、次のコードはこれを許可しますか?

class Foo
{
    friend class Foo;
}
4

4 に答える 4

23

それは冗長です。Foo は既にすべての Foo メンバーにアクセスできます。2 つの Foo オブジェクトは、互いのメンバーにアクセスできます。

class Foo {
public:
  int touchOtherParts(const Foo &foo) {return foo.privateparts;}
private:
  int privateparts;
};

Foo a,b;
b.touchOtherParts(a);

上記のコードは問題なく動作します。B は a のプライベート データ メンバーにアクセスします。

于 2010-09-30T16:19:01.813 に答える
5

はい、 class のFooオブジェクトが class の別のオブジェクトのプライベート メンバーにアクセスすることは合法ですFoo。これは、コピーの作成や代入などで必要になることが多く、特別なフレンド宣言は必要ありません。

于 2010-09-30T16:19:34.637 に答える
3

冗長で不要です。さらに、g ++で次の警告が表示されます

warning: class ‘Foo’ is implicitly friends with itself
于 2010-09-30T16:19:28.330 に答える