ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 11) онлайн

Дружественные классы

Методы могут быть превращены в дружественные функции одновременно с оп-

ределением всего класса как дружественного. Программа FRICLASS показывает,

как это выглядит на практике.

Листинг 11.14. Программа FRICLASS

// friclass.cpp

// Дружественные классы

#include <iostream>

using namespace std;

///////////////////////////////////////////////////////////

class alpha

  {

  private:

    int data1;

  public:

    alpha() : data1(99) {  }  //конструктор

    friend class beta;        //beta – дружественный класс

  };

///////////////////////////////////////////////////////////

class beta

  {                         //все методы имеют доступ

  public:                   //к скрытым данным alpha

    void func1(alpha a)  { cout << "\ndata1=" << a.data1;}

    void func2(alpha a)  { cout << "\ndata1=" << a.data1;}

  };

///////////////////////////////////////////////////////////

int main()

{

  alpha a;

  beta b;

 

  b.func1(a);

  b.func2(a);

  cout << endl;

  return 0;

}

 

Для класса alpha весь класс beta провозглашен дружественным. Теперь все

методы beta имеют доступ к скрытым данным класса alpha (в данной программе

это лишь единственная переменная data1).

Обратите внимание: мы объявляем именно класс дружественным, используя

выражение

 

friend class beta;

А можно было сделать и так: сначала объявить обычный класс beta:

class beta

затем объявить класс alpha, а внутри определения alpha объявить дружествен-

ность класса beta:

friend beta;

 

 

17