Il y a deux raisons à cela.
Tout d'abord, réalisez que le spécificateur d'accès est destiné au compilateur et n'est pas pertinent au moment de l'exécution. L'accès à un membre privé en dehors de la portée est une erreur de compilation .
Concision
Prenons une fonction courte, une ou deux lignes. Il existe pour réduire la réplication de code ailleurs, ce qui a également l'avantage de pouvoir changer la façon dont un algorithme ou quoi que ce soit d'autre fonctionne à un seul endroit au lieu de plusieurs (par exemple changer un algorithme de tri).
Souhaitez-vous plutôt avoir une ou deux lignes rapides dans l'en-tête, ou avoir le prototype de fonction plus une implémentation quelque part? Il est plus facile à trouver dans l'en-tête, et pour les fonctions courtes, il est beaucoup plus détaillé d'avoir une implémentation distincte.
Il y a un autre avantage majeur, qui est ...
Fonctions en ligne
Une fonction privée peut être en ligne, et cela nécessite nécessairement qu'elle soit dans l'en-tête. Considère ceci:
class A {
private:
inline void myPrivateFunction() {
...
}
public:
inline void somePublicFunction() {
myPrivateFunction();
...
}
};
La fonction privée peut être alignée avec la fonction publique. Cela se fait à la discrétion du compilateur, car le inline
mot clé est techniquement une suggestion , pas une exigence.