Access Specifiers
Access specifiers restrict who can access a member. You can use an access specifier before a base-class name in a class definition and have access specifier labels within a class definition. The access specifiers are:
publicAnyone can access a public member.
protectedOnly the class, derived classes, and friends can access protected members.
privateOnly the class and friends can access private members.
In a class definition, the
default access for members and base classes is private. In a struct definition, the default is public. That is the only difference between a
class and a struct, although by convention, some
programmers use struct only for POD
classes and use class for all other
classes.
The access level of a base class affects which members of the base class are accessible to users of a derived class (not the derived class’s access to the base class). The access level caps the accessibility of inherited members. In other words, private inheritance makes all inherited members private in the derived class. Protected inheritance reduces the accessibility of public members in the base class to protected in the derived class. Public inheritance leaves all accessibility as it is in the base class.
The access level of a base class also limits type casts and conversions. With public inheritance, you can cast from a derived class to a base class in any function. Only derived classes and friends can cast to a protected base class. For private inheritance, only the class ...