#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;
}