Há duas razões para fazer isso.
Primeiro, perceba que o especificador de acesso é para o compilador e não é relevante no tempo de execução. Acessar um membro privado fora do escopo é um erro de compilação .
Concisão
Considere uma função curta, uma ou duas linhas. Existe para reduzir a replicação de código em outro lugar, o que também tem a vantagem de poder alterar a maneira como um algoritmo ou qualquer outra coisa funciona em um local, em vez de muitos (por exemplo, alterar um algoritmo de classificação).
Você prefere ter uma ou duas linhas rápidas no cabeçalho ou ter o protótipo de função lá mais uma implementação em algum lugar? É mais fácil encontrar no cabeçalho e, para funções curtas, é muito mais detalhado ter uma implementação separada.
Há outra grande vantagem, que é ...
Funções em linha
Uma função privada pode ser incorporada e isso necessariamente exige que ela esteja no cabeçalho. Considere isto:
class A {
private:
inline void myPrivateFunction() {
...
}
public:
inline void somePublicFunction() {
myPrivateFunction();
...
}
};
A função privada pode ser incorporada juntamente com a função pública. Isso é feito a critério do compilador, pois a inline
palavra-chave é tecnicamente uma sugestão , não um requisito.