#include <iostream>
using std::cout;
using std::endl;
class B;
class A {
B* b_;
public:
A(B* b) : b_(b) { cout << "Конструктор А" << endl; }
void func_1();
void func_2() { cout << "Класс A func_2" << endl; }
};
class B {
A a;
public:
B() : a(this) { cout << "Конструктор B" << endl; }
void func_1() {
cout << "Класс В func_1" << endl;
a.func_1();
}
void func_2() {
cout << "Класс В func_2" << endl;
a.func_2();
}
};
void A::func_1() {
cout << "Класс А func_1" << endl;
b_->func_2();
}
int main() {
B b;
b.func_1();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgc3RkOjpjb3V0Owp1c2luZyBzdGQ6OmVuZGw7CgpjbGFzcyBCOwoKY2xhc3MgQSB7CiAgQiogYl87CgogcHVibGljOgogIEEoQiogYikgOiBiXyhiKSB7IGNvdXQgPDwgItCa0L7QvdGB0YLRgNGD0LrRgtC+0YAg0JAiIDw8IGVuZGw7IH0KICB2b2lkIGZ1bmNfMSgpOwogIHZvaWQgZnVuY18yKCkgeyBjb3V0IDw8ICLQmtC70LDRgdGBIEEgZnVuY18yIiA8PCBlbmRsOyB9Cn07CgpjbGFzcyBCIHsKICBBIGE7CgogcHVibGljOgogIEIoKSA6IGEodGhpcykgeyBjb3V0IDw8ICLQmtC+0L3RgdGC0YDRg9C60YLQvtGAIEIiIDw8IGVuZGw7IH0KCiAgdm9pZCBmdW5jXzEoKSB7CiAgICBjb3V0IDw8ICLQmtC70LDRgdGBINCSIGZ1bmNfMSIgPDwgZW5kbDsKICAgIGEuZnVuY18xKCk7CiAgfQoKICB2b2lkIGZ1bmNfMigpIHsKICAgIGNvdXQgPDwgItCa0LvQsNGB0YEg0JIgZnVuY18yIiA8PCBlbmRsOwogICAgYS5mdW5jXzIoKTsKICB9Cn07Cgp2b2lkIEE6OmZ1bmNfMSgpIHsKICBjb3V0IDw8ICLQmtC70LDRgdGBINCQIGZ1bmNfMSIgPDwgZW5kbDsKICBiXy0+ZnVuY18yKCk7Cn0KCmludCBtYWluKCkgewogIEIgYjsKICBiLmZ1bmNfMSgpOwp9Cg==