Доступ к закрытым элементам объекта того же класса - PullRequest
7 голосов
/ 30 сентября 2010

Это законно? Если нет, то разрешит ли это следующий код?

class Foo
{
    friend class Foo;
}

Ответы [ 4 ]

22 голосов
/ 30 сентября 2010

Это избыточно.Foo уже имеет доступ ко всем членам Foo.Два объекта Foo могут получить доступ к элементам друг друга.

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

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

Приведенный выше код будет работать нормально.B получит доступ к личному члену данных.

5 голосов
/ 30 сентября 2010

Да, для объекта класса Foo разрешен доступ к закрытым членам другого объекта класса Foo. Это часто необходимо для таких вещей, как создание и назначение копий, и не требуется никакого специального объявления друга.

3 голосов
/ 30 сентября 2010

Это избыточно и не нужно. Более того, я получаю следующее предупреждение в g ++

warning: class ‘Foo’ is implicitly friends with itself
1 голос
/ 18 октября 2016

Френдинг самих классов имеет смысл, если они являются шаблонами, поскольку каждый экземпляр с различными параметрами - это отдельный класс.

...