I'm writing a simple graphical application in SDL, and trying to design it in a nice OO manner.

I have a World class which basically contains the SDL_Surfaces for the background and screen and so on, and the World class contains a vector of pointers to a class Object, which is a pure abstract class which contains basic functionality for all objects.

The objects in the world are required to access some members of its World. One example is are the functions RealToEffective and EffectiveToReal, which are basically used to translate objects coordinates from their real coordinates to the effective coordinates(For a lack of a better term).
That is, the bottom left corner of the window is the origin(0,0) in "effective coordinates", as that's how the world is, but in SDL, the origin in the top left.

Code looks something like this:

Code:
class World
{
public:
     void AddObject(Object *obj);
     void AddObject(boost::shared_ptr<Object> Obj);
     Coord RealToEffective(int x, int y);
     Coord EffectiveToReal(int x, int y);
private:
     std::vector<boost::shared_ptr<Object>> _objects;
};
Currently, I'm simply passing each object a reference of the world it's in through the constructor, but I don't know, that doesn't seem like the best way to do it for some reason.

I'm kind of new to all these heavily OO designs, but I still love to do this. How would you guys solve this? Is there any proper way to do it, and is there something bad about doing it the way I'm currently doing it?