#include <iostream>
using namespace std;

class Coor
{
public:
    int x, y;
};

struct DataAccess
{
	virtual int Get(Coor &coor) = 0;
	virtual void Set(Coor &coor, int value) = 0;
};

struct AccessX : public DataAccess
{
	virtual int Get(Coor &coor) { return coor.x; }
	virtual void Set(Coor &coor, int value) { coor.x = value; }
};

struct AccessY : public DataAccess
{
	virtual int Get(Coor &coor) { return coor.y; }
	virtual void Set(Coor &coor, int value) { coor.y = value; }
};

bool algorithm(Coor &coor, DataAccess &accessor)
{
	cout << accessor.Get(coor) << endl;
	accessor.Set(coor, 100);
	cout << accessor.Get(coor) << endl;
	cout << "===============" << endl;

	return true;
}

int main()
{
	Coor coor;
	coor.x = 5;
	coor.y = 10;

	algorithm(coor, AccessX());
	algorithm(coor, AccessY());
}