@andlabs That's one of the reasons I prefer Java (and other languages) to C++, even though I code in C++ at work and I haven't touch to Java recently.
Because of how the object system is implemented in C++, the private members are in fact public from an interface or library point of view (since a change to the private fields changes the size or order of the underlying structure).
Everything using a class must be recompiled after a change to the private members.
That does not cause much harm for small projects. But for complex projects, that can mean hours of recompilation for every small change to the private part of a class.