#include <iostream>
using namespace std;
class A;
class Base {
public:
Base(A* a, int k);
void call();
void call2();
private:
A* a;
int k;
};
class A : public Base {
friend class Base;
public:
A() : Base(this, 5) {}
Base lol(int k) { return Base(this, k); }
using Base::call;
using Base::call2;
private:
void call(int k) { cout << "call(" << k << ");\n"; }
void call2(int k) { cout << "call2(" << k*2 << ");\n"; }
};
Base::Base(A* a, int k) : a(a), k(k) {}
void Base::call() {
a->call(k);
}
void Base::call2() {
a->call2(k);
}
int main() {
A a;
Base x = a.lol(3);
a.call();
x.call2();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEE7CgpjbGFzcyBCYXNlIHsKIHB1YmxpYzoKICBCYXNlKEEqIGEsIGludCBrKTsKICB2b2lkIGNhbGwoKTsKICB2b2lkIGNhbGwyKCk7CgogcHJpdmF0ZToKICBBKiBhOwogIGludCBrOwp9OwoKY2xhc3MgQSA6IHB1YmxpYyBCYXNlIHsKICBmcmllbmQgY2xhc3MgQmFzZTsKIHB1YmxpYzoKICBBKCkgOiBCYXNlKHRoaXMsIDUpIHt9CiAgCiAgQmFzZSBsb2woaW50IGspIHsgcmV0dXJuIEJhc2UodGhpcywgayk7IH0KICAKICB1c2luZyBCYXNlOjpjYWxsOwogIHVzaW5nIEJhc2U6OmNhbGwyOwogIAogcHJpdmF0ZToKICB2b2lkIGNhbGwoaW50IGspIHsgY291dCA8PCAiY2FsbCgiIDw8IGsgPDwgIik7XG4iOyB9CiAgdm9pZCBjYWxsMihpbnQgaykgeyBjb3V0IDw8ICJjYWxsMigiIDw8IGsqMiA8PCAiKTtcbiI7IH0KfTsKCkJhc2U6OkJhc2UoQSogYSwgaW50IGspIDogYShhKSwgayhrKSB7fQp2b2lkIEJhc2U6OmNhbGwoKSB7CiAgICBhLT5jYWxsKGspOwp9CnZvaWQgQmFzZTo6Y2FsbDIoKSB7CiAgICBhLT5jYWxsMihrKTsKfQoKaW50IG1haW4oKSB7CiAgICBBIGE7CiAgICBCYXNlIHggPSBhLmxvbCgzKTsKICAgIGEuY2FsbCgpOwogICAgeC5jYWxsMigpOwogICAgcmV0dXJuIDA7Cn0=