#include <iostream>
using namespace std;
class PierwszyDelegat {
public:
virtual void callBack() = 0;
};
class Pierwsza {
protected:
PierwszyDelegat *delegat;
public:
Pierwsza() : delegat(nullptr) {}
virtual ~Pierwsza() {}
void wykonajCallback(){ if (delegat) delegat->callBack(); }
};
class Druga : public Pierwsza, public PierwszyDelegat {
public:
Druga() {
delegat = this;
}
void callBack() { cout << "Test" << endl; }
};
int main(){
Pierwsza *obj = new Druga();
obj->wykonajCallback();
delete obj;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgUGllcndzenlEZWxlZ2F0IHsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIGNhbGxCYWNrKCkgPSAwOwp9OwoKY2xhc3MgUGllcndzemEgewogICAgcHJvdGVjdGVkOgogICAgICAgIFBpZXJ3c3p5RGVsZWdhdCAqZGVsZWdhdDsKICAgIHB1YmxpYzoKICAgICAgICBQaWVyd3N6YSgpIDogZGVsZWdhdChudWxscHRyKSB7fQogICAgICAgIHZpcnR1YWwgflBpZXJ3c3phKCkge30KICAgICAgICB2b2lkIHd5a29uYWpDYWxsYmFjaygpeyBpZiAoZGVsZWdhdCkgZGVsZWdhdC0+Y2FsbEJhY2soKTsgfQp9OwogCmNsYXNzIERydWdhIDogcHVibGljIFBpZXJ3c3phLCBwdWJsaWMgUGllcndzenlEZWxlZ2F0IHsKICAgIHB1YmxpYzoKICAgICAgICBEcnVnYSgpIHsKICAgICAgICAgICAgZGVsZWdhdCA9ICB0aGlzOyAgICAKICAgICAgICB9CiAgICAgICAgdm9pZCBjYWxsQmFjaygpIHsgY291dCA8PCAiVGVzdCIgPDwgZW5kbDsgfQp9OwogCmludCBtYWluKCl7CiAgICBQaWVyd3N6YSAqb2JqID0gbmV3IERydWdhKCk7CiAgICBvYmotPnd5a29uYWpDYWxsYmFjaygpOwogICAgZGVsZXRlIG9iajsKICAgIHJldHVybiAwOwp9Cg==