In C++, only public inheritance is deemed as real inheritance, which means a subclass will inherit the interface of its superclass(i.e IS-A relationship). A decent inheritance should satisfy Liskov substitution principle.
As for protected/private inheritance, they're actually kind of containment/composition, for a derived class will hide its base class's interface(as protected/private member) and only make use of base class's implementation(i.e. HAS-A or Is-Implemented-In-Terms-Of relationship).
You may refer to this question on SO for better understanding: Why do we actually need Private or Protected inheritance in C++?
That said, protected/private inheritance is an arguable feature in C++, which is abandoned by C++ successors like Java and C#.