#include <iostream>
using namespace std;
const int IDLE=0;
const int INUSE=1;
class C2; // опережающее объявление
class C1 {
int status; // IDLE если сообщение неактивно, INUSE если сообщение выведено на экран.
// ...
public:
void set_status(int state);
friend int idle(C1 a, C2 b);
};
class C2 {
int status; // IDLE если сообщение неактивно, INUSE если сообщение выведено на экран.
// ...
public:
void set_status(int state);
friend int idle(C1 a, C2 b);
};
void C1::set_status(int state)
{
status = state;
}
void C2::set_status(int state)
{
status = state;
}
// Функция idle() - "друг" для классов C1 и C2.
int idle(C1 a, C2 b)
{
if(a.status || b.status) return 0;
else return 1;
}
int main()
{
C1 x;
C2 y;
x.set_status(IDLE);
y.set_status(IDLE);
if(idle(x, y)) cout << "Экран свободен.\n";
else cout << "Отображается сообщение.\n";
x.set_status(INUSE);
if(idle(x, y)) cout << "Экран свободен.\n";
else cout << "Отображается сообщение.\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBJRExFPTA7Cgpjb25zdCBpbnQgSU5VU0U9MTsKCmNsYXNzIEMyOyAvLyDQvtC/0LXRgNC10LbQsNGO0YnQtdC1INC+0LHRitGP0LLQu9C10L3QuNC1CgpjbGFzcyBDMSB7CgogICAgaW50IHN0YXR1czsgLy8gSURMRSDQtdGB0LvQuCDRgdC+0L7QsdGJ0LXQvdC40LUg0L3QtdCw0LrRgtC40LLQvdC+LCBJTlVTRSDQtdGB0LvQuCDRgdC+0L7QsdGJ0LXQvdC40LUg0LLRi9Cy0LXQtNC10L3QviDQvdCwINGN0LrRgNCw0L0uCgogICAgLy8gLi4uCgpwdWJsaWM6CgogICAgdm9pZCBzZXRfc3RhdHVzKGludCBzdGF0ZSk7CgogICAgZnJpZW5kIGludCBpZGxlKEMxIGEsIEMyIGIpOwoKfTsKCmNsYXNzIEMyIHsKCiAgICBpbnQgc3RhdHVzOyAvLyBJRExFINC10YHQu9C4INGB0L7QvtCx0YnQtdC90LjQtSDQvdC10LDQutGC0LjQstC90L4sIElOVVNFINC10YHQu9C4INGB0L7QvtCx0YnQtdC90LjQtSDQstGL0LLQtdC00LXQvdC+INC90LAg0Y3QutGA0LDQvS4KCiAgICAvLyAuLi4KCnB1YmxpYzoKCiAgICB2b2lkIHNldF9zdGF0dXMoaW50IHN0YXRlKTsKCiAgICBmcmllbmQgaW50IGlkbGUoQzEgYSwgQzIgYik7Cgp9OwoKdm9pZCBDMTo6c2V0X3N0YXR1cyhpbnQgc3RhdGUpCgp7CgogICAgc3RhdHVzID0gc3RhdGU7Cgp9Cgp2b2lkIEMyOjpzZXRfc3RhdHVzKGludCBzdGF0ZSkKCnsKCiAgICBzdGF0dXMgPSBzdGF0ZTsKCn0KCi8vINCk0YPQvdC60YbQuNGPIGlkbGUoKSAtICLQtNGA0YPQsyIg0LTQu9GPINC60LvQsNGB0YHQvtCyIEMxINC4IEMyLgoKaW50IGlkbGUoQzEgYSwgQzIgYikKCnsKCiAgICBpZihhLnN0YXR1cyB8fCBiLnN0YXR1cykgcmV0dXJuIDA7CgogICAgZWxzZSByZXR1cm4gMTsKCn0KCmludCBtYWluKCkKCnsKCiAgICBDMSB4OwoKICAgIEMyIHk7CgogICAgeC5zZXRfc3RhdHVzKElETEUpOwoKICAgIHkuc2V0X3N0YXR1cyhJRExFKTsKCiAgICBpZihpZGxlKHgsIHkpKSBjb3V0IDw8ICLQrdC60YDQsNC9INGB0LLQvtCx0L7QtNC10L0uXG4iOwoKICAgIGVsc2UgY291dCA8PCAi0J7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINGB0L7QvtCx0YnQtdC90LjQtS5cbiI7CgogICAgeC5zZXRfc3RhdHVzKElOVVNFKTsKCiAgICBpZihpZGxlKHgsIHkpKSBjb3V0IDw8ICLQrdC60YDQsNC9INGB0LLQvtCx0L7QtNC10L0uXG4iOwoKICAgIGVsc2UgY291dCA8PCAi0J7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINGB0L7QvtCx0YnQtdC90LjQtS5cbiI7CgogICAgcmV0dXJuIDA7Cgp9