views:

83

answers:

3

Is this legal? If not, will the following code allow this?

class Foo
{
    friend class Foo;
}
+10  A: 

That's redundant. Foo already has access to all Foo members. Two Foo objects can access each other's members.

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

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

The above code will work just fine. B will access a's private data member.

JoshD
+1 very original with touching private parts
Alex
@Alex: it's an old C++ pun, that C++ is probably the only language where one allow one's friends to touch one's private parts :)
Matthieu M.
... but not the parents
ArunSaha
+1  A: 

It is redundant and unnecessary. Moreover, I get the following warning in g++

warning: class ‘Foo’ is implicitly friends with itself
ArunSaha
+2  A: 

Yes it is legal for an object of class Foo to access the private members of another object of class Foo. This is frequently necessary for things like copy construction and assignment, and no special friend declaration is required.

Tyler McHenry