El control de acceso en C++ le permite separar la interfaz de la implementación, pero la ocultación de la implementación es solo parcial. El compilador debe ver aún la declaración de todas las partes del objeto para poder crearlo y manipularlo correctamente. Podría imaginar un lenguaje de programación que requiriese solo la interfaz publica del objeto y permitiese que la implementación privada permaneciese oculta, pero C++ realiza comparación de tipos estáticamente (en tiempo de compilación) tanto como es posible. Esto significa que se dará cuenta lo antes posible de si hay un error. También significa que su programa será más eficiente. De todas formas, la inclusión de la implementación privada tiene dos efectos: la implementación es visible aunque no se pueda acceder a ella fácilmente, y puede causar recompilaciones innecesarias.
Algunos proyectos no pueden permitirse tener visible su implementación al publico. Puede dejar a la vista información estratégica en un fichero de cabecera de una librería que la compañía no quiere dejar disponible a los competidores. Puede estar trabajando en un sistema donde la seguridad sea clave - un algoritmo de encriptación, por ejemplo - y no quiere dejar ninguna pista en un archivo de cabecera que pueda ayudar a la gente a romper el código. O puede que su librería se encuentre en un ambiente «hostil», donde el programador accederá a los componentes privados de todas formas, usando punteros y conversiones. En todas estas situaciones, es de gran valor tener la estructura real compilada dentro de un fichero de implementación mejor que a la vista en un archivo de cabecera.