#include <iostream>
#include <memory>
using namespace std;
class PSData
{
char* mData;
public:
void Load() {};
char* GetData() // void zmien na odpowiadajÄ…cy Ci typ
{
cout << "GetData: " << this << endl;
return mData;
}
};
class DataLine
{
public:
DataLine(std::shared_ptr<PSData>& data)
{
data->GetData();
}
};
class DataType1 : public DataLine
{
public:
DataType1(std::shared_ptr<PSData>& data) : DataLine(data)
{}
};
class DataType2 : public DataLine
{
public:
DataType2(std::shared_ptr<PSData>& data) : DataLine(data)
{}
};
int main() {
shared_ptr<PSData> ptr = make_shared<PSData>();
DataType2 d2 = DataType2(ptr);
DataType1 d1 = DataType1(ptr);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgUFNEYXRhCnsKCWNoYXIqIG1EYXRhOwpwdWJsaWM6Cgl2b2lkIExvYWQoKSB7fTsKCWNoYXIqIEdldERhdGEoKSAvLyB2b2lkIHptaWVuIG5hIG9kcG93aWFkYWrEhWN5IENpIHR5cAoJewoJCWNvdXQgPDwgIkdldERhdGE6ICIgPDwgdGhpcyA8PCBlbmRsOwoJCXJldHVybiBtRGF0YTsKCX0KfTsKCmNsYXNzIERhdGFMaW5lCnsKcHVibGljOgoJRGF0YUxpbmUoc3RkOjpzaGFyZWRfcHRyPFBTRGF0YT4mIGRhdGEpCgl7CgkJZGF0YS0+R2V0RGF0YSgpOwoJfQp9OwoKY2xhc3MgRGF0YVR5cGUxIDogcHVibGljIERhdGFMaW5lCnsKcHVibGljOgoJRGF0YVR5cGUxKHN0ZDo6c2hhcmVkX3B0cjxQU0RhdGE+JiBkYXRhKSA6IERhdGFMaW5lKGRhdGEpCgl7fQp9OwoKY2xhc3MgRGF0YVR5cGUyIDogcHVibGljIERhdGFMaW5lCnsKcHVibGljOgoJRGF0YVR5cGUyKHN0ZDo6c2hhcmVkX3B0cjxQU0RhdGE+JiBkYXRhKSA6IERhdGFMaW5lKGRhdGEpCgl7fQp9OwoKaW50IG1haW4oKSB7CglzaGFyZWRfcHRyPFBTRGF0YT4gcHRyID0gbWFrZV9zaGFyZWQ8UFNEYXRhPigpOwoJRGF0YVR5cGUyIGQyID0gRGF0YVR5cGUyKHB0cik7CglEYXRhVHlwZTEgZDEgPSBEYXRhVHlwZTEocHRyKTsKCXJldHVybiAwOwp9