#include <iostream>
using namespace std;
class Foo {
int x = 0;
public:
void inc() { x++; }
int get() { return x; }
};
class Bar {
Foo *f;
public:
Bar(Foo *foo) { f = foo; }
int get() const { f->inc(); return f->get(); }
};
int bar(const Bar &bar) {
return bar.get();
}
int main() {
Foo f;
Bar b(&f);
cout << f.get() << endl;
cout << bar(b) << endl;
cout << f.get() << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEZvbyB7CiAgICBpbnQgeCA9IDA7CnB1YmxpYzoKICAgIHZvaWQgaW5jKCkgeyB4Kys7IH0KICAgIGludCAgZ2V0KCkgeyByZXR1cm4geDsgfQp9OwoKY2xhc3MgQmFyIHsKICAgIEZvbyAqZjsKcHVibGljOgogICAgQmFyKEZvbyAqZm9vKSB7IGYgPSBmb287IH0KICAgIGludCBnZXQoKSBjb25zdCB7IGYtPmluYygpOyByZXR1cm4gZi0+Z2V0KCk7IH0KfTsKCmludCBiYXIoY29uc3QgQmFyICZiYXIpIHsKICAgIHJldHVybiBiYXIuZ2V0KCk7Cn0KCmludCBtYWluKCkgewogICAgRm9vIGY7CiAgICBCYXIgYigmZik7CiAgICBjb3V0IDw8IGYuZ2V0KCkgPDwgZW5kbDsKICAgIGNvdXQgPDwgYmFyKGIpICA8PCBlbmRsOwogICAgY291dCA8PCBmLmdldCgpIDw8IGVuZGw7Cn0=