C ++ Friend Classes - PullRequest
       3

C ++ Friend Classes

3 голосов
/ 15 ноября 2010

Просто пытаюсь убедиться, что я правильно понял друзей с этим

class A
{
  friend class B;
  int valueOne;
  int valueTwo;
  public:
  int GetValueOne(){ return valueOne; }
}
class B
{
  public:
  A friendlyData;
  int GetValueTwo(){ return friendlyData.valueTwo; }
}
main()
{
  B myObject;
  myObject.friendlyData.GetValueOne(); // OK?
  myObject.GetValueTwo(); // OK?
}

В отношении этого кода, если мы проигнорируем отсутствие инициализации, две функции в main будут в порядке, верно? И кроме того, что нужно делать что-то напуганное, у них не должно быть другого способа получить данные из этих классов ... Внешняя сторона этих классов B.A не имеет доступных данных, только функция-член.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2010

Да, два идентифицированных вызова в main в порядке.Они включают в себя доступ 3 членов: B::A, B::GetValueTwo и A::GetValueOne.Все из которых имеют public доступность и не содержат никаких типов первичных.Следовательно, их можно использовать из любого места, включая main.

0 голосов
/ 15 ноября 2010

Это выглядит разумно, так как оба метода GetValueX общедоступны, и поэтому вызовы в порядке. Звонок на GetValueTwo() вызов использует его дружбу.

Слово предупреждения: дружба может нарушить инкапсуляцию в вашем дизайне.

...