fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int IDLE=0;
  6.  
  7. const int INUSE=1;
  8.  
  9. class C2; // опережающее объявление
  10.  
  11. class C1 {
  12.  
  13. int status; // IDLE если сообщение неактивно, INUSE если сообщение выведено на экран.
  14.  
  15. // ...
  16.  
  17. public:
  18.  
  19. void set_status(int state);
  20.  
  21. friend int idle(C1 a, C2 b);
  22.  
  23. };
  24.  
  25. class C2 {
  26.  
  27. int status; // IDLE если сообщение неактивно, INUSE если сообщение выведено на экран.
  28.  
  29. // ...
  30.  
  31. public:
  32.  
  33. void set_status(int state);
  34.  
  35. friend int idle(C1 a, C2 b);
  36.  
  37. };
  38.  
  39. void C1::set_status(int state)
  40.  
  41. {
  42.  
  43. status = state;
  44.  
  45. }
  46.  
  47. void C2::set_status(int state)
  48.  
  49. {
  50.  
  51. status = state;
  52.  
  53. }
  54.  
  55. // Функция idle() - "друг" для классов C1 и C2.
  56.  
  57. int idle(C1 a, C2 b)
  58.  
  59. {
  60.  
  61. if(a.status || b.status) return 0;
  62.  
  63. else return 1;
  64.  
  65. }
  66.  
  67. int main()
  68.  
  69. {
  70.  
  71. C1 x;
  72.  
  73. C2 y;
  74.  
  75. x.set_status(IDLE);
  76.  
  77. y.set_status(IDLE);
  78.  
  79. if(idle(x, y)) cout << "Экран свободен.\n";
  80.  
  81. else cout << "Отображается сообщение.\n";
  82.  
  83. x.set_status(INUSE);
  84.  
  85. if(idle(x, y)) cout << "Экран свободен.\n";
  86.  
  87. else cout << "Отображается сообщение.\n";
  88.  
  89. return 0;
  90.  
  91. }
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
Экран свободен.
Отображается сообщение.