Bjarne does in fact discourage the use of protected data, but he didn't always feel that way or he wouldn't have made protected data in the first place. Further, C++ isn't truly an OO language. It's a hybrid and doesn't offer certain things you might expect from a "true" OO language such as SmallTalk. Many things in C++ are not objects in their own right, such as POD's (Plain Old Data). An int isn't an object in C++. Technically, using C++ at all isn't doing OOP if you want to be technical, but in reality we can say that C++ offers a good deal of OOP in a realistic way. OOP talks of sending messages beteween objects, which C++ doesn't really offer, though calling member functions is about the next best thing. Windows does offer a form of message passing, but C++ itself doesn't. It's quite silly to get all defensive about "not doing oop" in C++ when the language itself is not really OOP even when using it in the way intended by its creator. It's all a hybrid, and where one draws the line is largely a subjective judgement by those using it. As i've said. I see nothing wrong with accessing members directly that are const or effectively const. This doesn't violate encapsulation in any form because the members cannot be calculated or changed. I also don't see how they can violate OOP since even calling getters and setters violates OOP in it's purest form.