I am really confused about private inheritance and protected inheritance.
1) in protected inheritance, the public and protected members become protected members in
1a) Protected inheritance means the "child" can access everything it could in public inheritance, but others using that object can only see the public interface to the child, anything in it's parent is hidden.
1b) Private inheritance results in all public functions of a class being inherited as private functions - meaning they can not be called from the child or accessed from a client of your object.
2) Private members are inherited because methods in the base class might need them to operate on.