When you declare a derived class, a visibility mode can precede each base class in the base list of the derived class. This does not alter the access attributes of the individual members of a base class , but allows the derived class to access the members of a base class with restriction.
Classes can be derived using any of the three visibility mode:
1. In a public base class, public and protected members of the base class remain public and protected members of the derived class.
2. In a protected base class, public and protected members of the base class are protected members of the derived class.
3. In a private base class, public and protected members of the base class become private members of the derived class.
4. In all these cases, private members of the base class remain private and cannot be used by the derived class. However it can be indirectly accessed by the derived class using the public or protected member function of the base class since they have the access privilege for the private members of the base class.