One of the more advanced C++ techniques to hide data from the outside and to stay binary compatible while changing data members and functionality in a class is called "Cheshire Cat". In simplified terms: you hide all the data behind a single pointer data member, whose content is not known inside the header file. This technique is also referred to as "PImpl" (pointer implementation), "compiler firewall" or simply "d-pointer".
There are quite a few tutorials out there:
Chester is my own implementation of helpers for the Cheshire Cat in C++. It is compatible with any standards conformant C++ compiler - I myself use it with Qt based projects. You can get the source here:
svn co https://silmor.de/svn/softmagic/chester/trunk chester git clone git://silmor.de/konrad/chester.git chester
The GIT version is the more current one of the two.
The project consists of header files only, so there is no need to compile anything, except the documentation - simply call doxygen inside the main path and then read html/index.html for more details.
The source is under a permissive license - you can use it in any project.
Chester is work in progress: as I discover new use cases for Cheshire Cats I will continue to add macros and documentation.