Xirdus
Xirdus

Reputation: 3087

Access private elements of object of same class

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

class Foo
{
    friend class Foo;
}

Upvotes: 8

Views: 7110

Answers (4)

LogicBreaker
LogicBreaker

Reputation: 105

Classes friending themselves makes sense if they're templates, as each instantiation with distinct parameters is a different class.

Upvotes: 2

Arun
Arun

Reputation: 20403

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

warning: class ‘Foo’ is implicitly friends with itself

Upvotes: 3

Tyler McHenry
Tyler McHenry

Reputation: 76770

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.

Upvotes: 5

JoshD
JoshD

Reputation: 12824

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.

Upvotes: 24

Related Questions