Method Safety Levels (public
vs. protected
vs. private
)
This topic is slightly confusing. The default access right is private in a class. For struct it is always public.
- Public: called anywhere
- The client’s interface
- Protected: you can only access it from a derived class
- Private: only used inside the class itself
- This has the secret implementation details
Access rights are not the same as visibility!
Private parts are visible in children (children can even redefine inherited private methods!); children just can’t use/call inherited private parts.
- This is kind of confusing, but basically “visibility” means that the children are aware of the private parts of the parent, but cannot access get them.
Some things I learned that confused me
Ohhh I finally get it, this is one of the peculiarities of Polymorphism!
Why is this happening?
Even though
somethingProtected()
is a protected function, you cannot access protected members from objects of base type. You MUST access them from objects of the same derived type.There are 3 ways to access protected members:
pointer->member
syntaxreference.member
orobject.member
syntaxwhere pointer/reference/object refers to the same derived class being called. StackOverflow
So something like this also wouldn’t work, because b
is a base class, but other syntaxes do:
but with a friend
, this would be allowed!! See friend (C++).
This is still super confusing, so I think the best way to get over this confusion is to consult the official https://cplusplus.com/doc/tutorial/inheritance/ page.