Complier will make an indirection/lookup for virtual methods. This only applies to methods (aka. member functions). This indirection/lookup is not applied in C++ to data members (what you called variables).
See following picture which may give a better graphical representation: http://www.yaldex.com/games-programming/FILES/05fig07.gif
So, provide access through [virtual] getter/setter.