//    Листинг 15.1.  FRIEND.CPP (использование дружественных классов)

#include <iostream.h>

class Pal {
   friend class Buddy;  //  Buddy - друг класса Pal
private:
   int x; //  Доступен членам Pal и Buddy
protected:
   void doublex(void) { x *= x; } //  Доступен в Pal и Buddy
public:
   Pal() { x = 100; } //  Доступна всем пользователям
   Pal(int n) { x = n; }  //
};

class Buddy {
private:
   Pal palObject; //  Доступен только членам Buddy
public:
   void ShowValues(void); //  Доступна всем пользователям
};

main()
{
  Buddy aSuddy;

  aSuddy.ShowValues();
  return 0;
}

void Buddy::ShowValues(void)
{
  Pal aPal(1234);

  cout << "\nBefore, palObject.x  ==" << palObject.x;
  palObject.doublex() ;
  cout << "\nAfter, palObject.x ==" << palObject.x;
  cout << "\naPal.x == " << aPal.x << "\n";
} 
