Well, technically, the class itself, and any that inherits from it can access protected members (be it functions or variables). This make protected in itself fairly pointless, since you can either not inherit the class anyways - in which case they may as well be private, or you if you want to access the member, you just inherit the class into your own derived class and have your merry way with whatever member it is you want to "play" with.
But for the usage described above, the setter/getter members need to be made public to make them work.
[And of course, ANY of the members are really accessible to anyone who can see the class variable (or guess where it is), since there is always the possibility of casting it into a pointer that you can access the memory of the object with - but that's sort of cheating ]
--
Mats