Hay dos razones para hacer esto.
Primero, comprenda que el especificador de acceso es para el compilador y que no es relevante en el tiempo de ejecución. Acceder a un miembro privado fuera del alcance es un error compile .
Concisión
Considere una función que es corta, una o dos líneas. Existe para reducir la replicación de código en otros lugares, lo que también tiene la ventaja de poder cambiar la forma en que un algoritmo o cualquier otra cosa funciona en un solo lugar en lugar de muchos (por ejemplo, cambiar un algoritmo de clasificación).
¿Preferiría tener una o dos líneas rápidas en el encabezado, o tener la función prototipo allí más una implementación en algún lugar? Es más fácil de encontrar en el encabezado, y para funciones cortas, es mucho más detallado tener una implementación separada.
Hay otra ventaja importante, que es ...
Funciones en línea
Una función privada puede estar en línea, y esto necesariamente requiere que esté en el encabezado. Considera esto:
class A {
private:
inline void myPrivateFunction() {
...
}
public:
inline void somePublicFunction() {
myPrivateFunction();
...
}
};
La función privada puede ser capaz de estar en línea junto con la función pública. Esto se hace a discreción del compilador, ya que la palabra clave inline
es técnicamente una sugerencia , no un requisito.