I've been thinking about this recently. This question isn't specific to C++, but a general OO question. Why would you ever want to use private instead of protected? If you are the leaf node class, you don't lose any encapsulation and if you're a parent class, your children are going to want access to your members, otherwise a lot of the benefits of inheritance are lost. I can't think of any scenarios where a parent would want to restrict its childrens' access to its members.