What is the difference between private
and protected
members in C++ classes?
I understand from best practice conventions that variables and functions which are not called outside the class should be made private
—but looking at my MFC project, MFC seems to favor protected
.
What's the difference and which should I use?
Private members are only accessible within the class defining them.
Protected members are accessible in the class that defines them and in classes that inherit from that class.
Both are also accessible by friends of their class, and in the case of protected members, by friends of their derived classes.
Use whatever makes sense in the context of your problem. You should try to make members private whenever you can to reduce coupling and protect the implementation of the base class, but if that's not possible, then use protected members.
Check C++ FAQ for a better understanding of the issue. This question about protected variables might also help.