问题
Is this legal? If not, will the following code allow this?
class Foo
{
friend class Foo;
}
回答1:
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.
回答2:
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.
回答3:
It is redundant and unnecessary. Moreover, I get the following warning in g++
warning: class ‘Foo’ is implicitly friends with itself
回答4:
Classes friending themselves makes sense if they're templates, as each instantiation with distinct parameters is a different class.
来源:https://stackoverflow.com/questions/3832613/access-private-elements-of-object-of-same-class