To begin answering that question, let me characterise member accessors in my own terms.
If you already know this, proceed to the section "next:".
I'm aware of three types of accessors: public, protected, and private.
Let:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
Everything that is aware of Base is likewise aware of the existence of publicMember in Base.
Only the children (and their offspring) are aware that protectedMember exists in Base.
PrivateMember is unknown to everyone except Base.
By "is aware of," I mean "acknowledges the existence of and hence has access to."
next:
The same is true for public, private, and protected inheritance.
Consider the classes Base and Child, which both inherit from Base.
If the inheritance is made public, everyone who knows about Base and Child is likewise aware that Child is descended from Base.
Only Child and its children are aware that they inherit from Base if the inheritance is protected.
If the inheritance is kept confidential, no one knows about it except Child.