When a derived class inherits from a private base, the is-a relation between a derived object and its private base does not exist. For example:
class Mem_Manager {/*..*/};class List: private Mem_Manager {/*..*/};void OS_Register( Mem_Manager& mm);void main() { List li; OS_Register( li ); //compile time error; conversion from List & to Mem_Manager& is inaccessible }
Private inheritance is like containment. In the example, class List has a private base, Mem_Manager, which is responsible for its necessary memory bookkeeping. However, List is not a memory manager by itself. Therefore, private inheritance is used to block its misuse.