On a vu dans le cours intitulé Encapsulation des données qu’on peut décider celui qui a le droit d’accéder aux données d’une classe. En les rendant publiques, elles sont accessibles par tout le monde. En les rendant protégées, seules les fonctions de la classe et celles des héritiers peuvent accéder. Et en les rendant privées, seules les fonctions de la classe ont le droit d’accès.
Mais là, on ne vous a pas tout dit. Eh oui ! Il peut y avoir une exception même si les données sont privées. Et c’est cette exception qui nous intéresse dans ce cours.
Comme on l’a dit ci-haut, les données privées d’une classe, seules les fonctions membres y ont accès. Cependant, on peut faire en sorte que ces données soient accessibles par une ou plusieurs fonctions depuis l’extérieur : il suffit de déclarer une fonction amie.
Une fonction amie d’une classe, bien qu’elle ne soit pas membre de cette classe, a le droit d’accéder à tous les données de cette classe (données publiques, protégées ou privées). Elle a même le droit d’y apporter des modifications.
Pour déclarer l’amitié, on utilise le mot-clé friend.
Voici la syntaxe de la déclaration d’une fonction amie :
friend type-de-retour nom-de-la-classe :: fonction (args);
Exemple :
Une classe amie à une classe, est une classe qui doit avoir accès à toutes les méthodes de la classe avec
laquelle elle est amie.
Pour plus de clarté, si la classe A est amie de la classe B cela signifie que A doit avoir accès à toutes les
méthodes de B.
Pour déclarer une classe amie, voici la syntaxe :
friend class nom-de-la-classe-amie ;
La déclaration de la classe amie doit se faire à l’intérieur de la classe cible.
Exemple :