Access
control in C++ gives valuable control to the creator of a class. The users of
the class can clearly see exactly what they can use and what to ignore. More
important, though, is the ability to ensure that no client programmer becomes
dependent on any part of the underlying implementation of a class. If you know
this as the creator of the class, you can change the underlying implementation
with the knowledge that no client programmer will be affected by the changes
because they can’t access that part of the class.
When
you have the ability to change the underlying implementation, you can not only
improve your design at
some later time, but you also have the freedom to make mistakes.
No matter how carefully you plan and design, you’ll make mistakes.
Knowing that it’s relatively safe to make these mistakes means
you’ll be more experimental, you’ll learn faster, and you’ll
finish your project sooner.
The
public interface to a class is what the client programmer
does
see, so that is the most important part of the class to get “right”
during analysis and design. But even that allows you some leeway for change. If
you don’t get the interface right the first time, you can
add
more functions,
as long as you don’t remove any that client programmers have already used
in their code.