© whiteMocca/Shutterstock.com

Dans le monde de la programmation, il y a beaucoup de choix de langages à utiliser. Beaucoup d’entre eux sont connus sous le nom de langages de programmation orientés objet, qui se concentrent sur la conception de programmes autour d’objets et sur la manière dont ils interagissent les uns avec les autres.

À cette fin, les propriétés des objets sont définies par des classes et sont utilisées pour contenir des données ainsi que du code pour opérer sur ces données.

A C++ est un exemple populaire de langage orienté objet, et une grande partie de son utilisation implique la fonction friend et les classes friend. Dans cet article, nous allons découvrir ce que sont une fonction et une classe d’amis, et comment elles sont utilisées avec C++.

Qu’est-ce que la fonction et la classe d’amis ?

Masquer ou encapsuler des données est un principe clé dans la programmation orientée objet, généralement afin de fournir une interface plus conviviale pour interagir avec ou restreindre l’accès aux fonctions à certains blocs de code. Cependant, vous pouvez parfois souhaiter que le code d’une certaine classe soit accessible par une fonction en dehors de celle-ci.

C’est là que le mot-clé ami et la fonction ami entrent en jeu. Une fonction ami peut accéder à des données protégées et privées et peut être déclarée en utilisant le mot-clé ami. En tant que telle, la fonction friend peut être utilisée pour opérer sur des objets d’une ou plusieurs classes.

Il convient de noter qu’une fonction amie peut être soit une fonction membre (associée à une classe particulière) soit une fonction globale (définie en dehors de toute classe).

Les fonctions d’ami sont des fonctions externes normales qui bénéficient de privilèges d’accès spéciaux.

©gonin/Shutterstock.com

Une classe ami fonctionne de manière similaire, mais, puisque toute la classe est un « ami » d’une autre classe, toutes les fonctions membres de la classe ami ont accès à tous les membres de l’autre classe.

En d’autres termes, une fonction amie est déclarée comme amie d’une classe particulière, alors qu’une classe amie est définie dans la classe avec laquelle vous voulez qu’elle soit amie.

Comment Utilisez la fonction ami

Maintenant que nous avons couvert ce que sont les fonctions et les classes amies, il est temps de regarder un exemple de la façon dont la fonction ami peut être implémentée :

class MyClass { private: int X; public : ami void myFriendFunction(MyClass& obj) { obj.x=10 ; } }

Ici, nous avons défini la fonction”myFriendFunction”comme une amie de la classe”MyClass”. En tant que telle, la fonction est déclarée dans la définition de classe et peut accéder au membre privé de cette classe,”x”.

Comment utiliser une fonction Global Friend

Si nous voulons déclarer la fonction friend comme une fonction globale, nous devons la définir en dehors de la définition de la classe. Cela peut être fait de manière très similaire à l’exemple précédent:

class MyClass { private: int x; public : ami void my GlobalFriendFunction(MyClass& obj) ; } ; void myGlobalFriendFunction(MyClass& obj) { obj.x=10; }

Le code est essentiellement le même, sauf que la fonction friend est définie en dehors de la classe. En tant que telle, cette fonction amie peut potentiellement être une amie de n’importe quelle classe, puisqu’elle n’a pas été définie à l’intérieur d’une classe.

Comment déclarer une fonction comme amie de plusieurs classes

Vous n’avez pas à vous contenter de rendre une fonction conviviale pour une seule classe. Les fonctions peuvent être amies avec plusieurs classes. Découvrez comment procéder ci-dessous :

class MyClass1 ; class MyClass2 { privé : int y ; public: ami void myFriendFunction(MyClass1&, MyClass2&); } ; class MyClass1 { privé : int x ; public: ami void myFriendFunction(MyClass1&, MyClass2&); } ; void myFriendFunction(MyClass1& obj1, MyClass2& obj2) { obj1.x=10; obj2.y=20 ; }

Ici, nous avons défini deux classes,”MyClass1″et”MyClass2″, ainsi que la fonction globale”myFriendFunction”. La fonction friend est déclarée dans les deux définitions de classe et peut donc modifier les membres privés de ces deux objets. A savoir, les membres”x”et”y”. Notez que la première ligne est utilisée pour transmettre la déclaration”MyClass1″.

Une classe d’amis peut accéder aux membres privés et protégés de la classe dans laquelle il est déclaré ami.

©Yurchanka Siarhei/Shutterstock.com

Cela permet au compilateur de connaître l’existence de”MyClass1″sans le définir au préalable. Ceci est fait pour que”MyClass1″soit pris en compte lors de la compilation de la déclaration de la fonction friend, en évitant les erreurs de compilation.

Comment utiliser une classe Friend

Dans l’exemple précédent, nous avons défini la”myFriendFunction”en tant qu’amie de la classe”MyClass”. L’accès et la modification du membre privé”x”sont accordés à la classe d’amis.

Cependant, une classe d’amis est un peu différente. Voici un exemple:

class MyClass { private: int x; public : classe d’amis MyFriendClass ; } ; class MyFriendClass { public : void myFunction(MyClass& obj) { obj.x=10 ; } }

Dans ce cas, la classe”MyFriendClass”est désignée comme une classe amie de la classe”MyClass”. Chaque fonction à l’intérieur peut accéder au membre privé”x”, comme la fonction membre”myFunction”.

Récapitulatif

Le mot-clé friend peut être utilisé pour déclarer une fonction friend. Cela permet à la fonction d’accéder aux membres privés d’une classe. Vous pouvez également utiliser le mot-clé ami pour déclarer une classe d’amis. Cela signifie que toutes les fonctions membres de cette classe peuvent accéder à la classe conviviale.

Le mot-clé ami est utile lorsque nous voulons accorder l’accès à des membres spécifiques d’une classe à une fonction ou une classe sans révéler tous ces membres protégés à l’interface publique. En général, la fonction ne doit être utilisée que lorsque cela est nécessaire. Cela permet de maintenir les principes de masquage et d’encapsulation des données de la programmation orientée objet.

Suivant

Fonction ami et classe ami en C++, FAQ expliquées (Foire aux questions) 

Qu’est-ce qu’une fonction ami ?

Une fonction ami est une fonction qui a été autorisée à accéder aux membres privés d’une classe à l’aide du mot-clé ami.

Qu’est-ce qu’une classe d’amis ?

Une classe d’amis fonctionne de la même manière, sauf que toutes les fonctions membres de la classe d’amis peuvent accéder aux membres protégés de l’autre classe.

Une fonction ami est-elle membre ou fonction globale ?

Cela peut être l’un ou l’autre. Si vous définissez la fonction friend en dehors de la classe, il s’agit d’une fonction globale et peut potentiellement accéder à d’autres classes. S’il est défini dans la définition de la classe, il ne peut accéder qu’aux membres de cette classe.

Pourquoi utiliseriez-vous une fonction ou une classe ami ?

Ils’re utile pour accorder l’accès aux membres de classe privés ou protégés, sans exposer toutes ces informations à l’interface publique. Ceci est important pour maintenir le masquage et l’encapsulation des données.

Une fonction ami peut-elle accéder aux membres d’une sous-classe ?

Non, si elle est définie dans une classe de base alors il ne peut pas accéder aux membres des sous-classes.

La fonction d’ami affecte-t-elle les performances ?

Non, la fonction d’ami n’affecte que la visibilité de la classe privée membres.

Une classe d’amis peut-elle être héritée ?

Oui, les classes d’amis peuvent être héritées.

By Maxwell Gaven

J'ai travaillé dans l'informatique pendant 7 ans. C'est amusant d'observer le changement constant dans le secteur informatique. L'informatique est mon travail, mon passe-temps et ma vie.