Introduction à la fonction Friend en C ++

Une caractéristique unique du programme C ++ est qu'il utilise l'encapsulation pour garder les données enveloppées avec toutes ses fonctions opérationnelles pour constituer une entité individuelle. Cela garantit que les données particulières ne sont accessibles que par les tâches qui y sont exécutées et non par une autre tâche en dehors de cette classe. Par conséquent, dans les cas où la classe externe pourrait avoir besoin d'accéder à ces données particulières, nous utilisons cette fonction spécifique appelée la fonction «ami». Nous savons qu'en utilisant des mots clés comme «protégés» et «privés», nous ne pouvons pas accéder à ces données en dehors de sa méthode. Mais pour une application en temps réel, il existe de nombreux cas où nous pouvons avoir besoin des mêmes données privées / protégées et l'utilisation de celles déjà déclarées est toujours plus préférable que de les créer plusieurs fois. Voyons comment déclarer et utiliser une fonction Friend en C ++ dans cet article.

Une fonction friend lors de la déclaration est précédée du mot-clé "friend" comme indiqué ici:

Syntaxe :

class (
private
protected
friend (arguments list);
)
returnDatatype functionName(arguments list)(
//function from which protected and private keywords
//can be accessed from as this is a friend method of className
)
class (
private
protected
friend (arguments list);
)
returnDatatype functionName(arguments list)(
//function from which protected and private keywords
//can be accessed from as this is a friend method of className
)

Comme indiqué dans le code ci-dessus, la fonction friend doit être déclarée dans la même classe où le mot-clé protected ou private a été déclaré pour que ces données soient accessibles en dehors de la classe. Cette fonction peut être déclarée n'importe où dans le programme entier, tout comme une méthode C ++ normale. La définition de la fonction ne nécessite pas de mots-clés comme amis ou d'opérateurs de résolution d'étendue.

Exemples de fonction Friend dans le programme C ++

Voyons un peu mieux le fonctionnement de la fonction ami en prenant quelques exemples ci-dessous.

Exemple 1

Code:

/* C++ program which exhibits the working of friend function.*/
#include
using namespace std;
class Weight
(
private:
int kilo;
public:
Weight(): kilo(0) ( )
//Declaration of a friend function
friend int addWeight(Weight);
);
// Defining a friend function
int addWeight(Weight w)
(
//accessing private data from non-member function
w.kilo += 17;
return w.kilo;
)
int main()
(
Weight W;
cout<<"Weight: "<< addWeight(W);
return 0;
)

Production:

Ici, la fonction friend est la méthode addWeight () qui est déclarée dans la classe Weight. Kilo est le mot-clé privé déclaré dans la méthode Weight qui est ensuite accessible à partir de la fonction addWeight à cause de cela. Cet exemple était juste pour montrer l'utilisation de base d'une fonction ami bien qu'il n'y ait pas d'utilisation en temps réel ici. Plongeons-nous maintenant dans des exemples significatifs.

Exemple # 2

Code:

#include
using namespace std;
// Forward declaration
class SecondClass;
class FirstClass (
private:
int first_num;
public:
FirstClass(): first_num(12) ( )
// Declaring a friend function
friend int divide(FirstClass, SecondClass);
);
class SecondClass (
private:
int sec_num;
public:
SecondClass(): sec_num(4) ( )
// Another friend declaration
friend int divide(FirstClass, SecondClass);
);
// Function divide() is the friend function of classes FirstClass and SecondClass
// that accesses the member variables first_num and sec_num
int divide(FirstClass fnum, SecondClass snum)
(
return (fnum.first_num / snum.sec_num);
)
int main()
(
FirstClass fnum;
SecondClass snum;
cout<<"The value got by dividing first by second number: "<< divide(fnum, snum);
return 0;
)

Production:

Dans cet exemple, les classes FirstClass et SecondClass ont déclaré divide () comme fonction ami. Par conséquent, cette fonction peut accéder aux données des variables privées de la classe. Ici, la fonction divide () est utilisée pour ajouter des variables privées first_num et sec_num de deux objets fnum et snum et renvoie sa valeur à la méthode principale.

Pour que cela fonctionne correctement, une déclaration directe pour SecondClass doit être effectuée comme indiqué dans le code car SecondClass est référencé dans FirstClass à l'aide du programme:

friend int divide(FirstClass, SecondClass);

Classe d'amis: Il existe une classe d'amis, tout comme la fonction ami. La classe d'amis peut également accéder aux variables privées et protégées de la classe car elle en est l'amie.

Syntaxe :

class One(
friend class Two;
);
class Two(
);
class One(
friend class Two;
);
class Two(
);
class One(
friend class Two;
);
class Two(
);

Comme indiqué ci-dessus, la classe deux est un ami de la classe un. Par conséquent, la classe deux peut accéder aux variables privées et protégées de la classe un. Mais la classe un ne peut pas accéder aux variables protégées ou privées de la classe deux car ce n'est pas une amitié mutuelle. Pour l'amitié mutuelle, nous devons le déclarer explicitement. De la même manière, cette amitié de classe n'est pas héritée, ce qui signifie que la classe Two ne doit pas être un ami des sous-classes de la classe One même si c'est un ami de la classe One.

Exemple # 3

Code:

#include
#include
using namespace std;
class Perimeter(
int len, brd, perimeter, temp;
public:
Perimeter(int len, int brd):len(len), brd(brd)
()
void calcPerimeter()(
temp = len + brd;
perimeter = 2 * temp;
)
friend class printClass;
);
class printClass(
public:
void printPerimeter(Perimeter a)(
cout<<"Perimeter = "< )
);
int main()(
Perimeter a(10, 15);
a.calcPerimeter();
printClass p;
p.printPerimeter(a);
return 0;
)
#include
#include
using namespace std;
class Perimeter(
int len, brd, perimeter, temp;
public:
Perimeter(int len, int brd):len(len), brd(brd)
()
void calcPerimeter()(
temp = len + brd;
perimeter = 2 * temp;
)
friend class printClass;
);
class printClass(
public:
void printPerimeter(Perimeter a)(
cout<<"Perimeter = "< )
);
int main()(
Perimeter a(10, 15);
a.calcPerimeter();
printClass p;
p.printPerimeter(a);
return 0;
)

Production:

Dans ce code, nous avons 2 classes: Classe de périmètre qui trouve le périmètre en utilisant les valeurs de longueur et de largeur. Les variables len, brd, perimeter et temp sont toutes des variables privées du périmètre de la classe. Par conséquent, nous devons faire de printClass un ami de la classe Perimeter. Cette classe d'impression utilise la valeur de périmètre calculée dans la fonction calcPerimeter () de la classe Périmètre. Comme ils sont tous des membres privés, nous devons faire de printPerimeter un ami de la classe Perimeter. Une fois cela fait, nous devons créer un objet dans la classe principale pour calculer le périmètre et passer cet objet à la classe printPerimeter pour afficher le périmètre.

Caractéristiques de la fonction Friend en C ++

  • La méthode et la classe à laquelle il a été déclaré ami n'ont pas besoin d'être les mêmes.
  • Puisqu'il n'est pas dans la portée de la classe respective, il ne peut pas être appelé en utilisant son objet.
  • Il peut également être appelé comme une méthode normale même sans utilisation de l'objet.
  • Il ne peut accéder directement aux noms de membres qu'en utilisant son nom d'objet et son opérateur d'appartenance à points avec son nom de membre.
  • Il n'y a aucune restriction car il est autorisé à être déclaré dans la partie privée ou publique.

Conclusion

Compte tenu de toutes les fonctionnalités décrites ci-dessus et des exemples de fonction ami en C ++, il faut également être prudent lors de l'utilisation des fonctions d'un ami avec de nombreuses fonctions et classes externes car cela peut diminuer l'importance de l'encapsulation de différentes classes dans la programmation orientée objet. Par conséquent, cela peut être à la fois une aubaine et un fléau pour le programmeur.

Article recommandé

Ceci est un guide de la fonction Friend en C ++. Nous discutons ici de la fonction Introduction à Friend en C ++ et de ses exemples ainsi que de l'implémentation et de la sortie du code. vous pouvez également consulter nos articles suggérés pour en savoir plus -

  1. Fonction récursive en C ++ (exemples)
  2. Top 11 des fonctionnalités de C ++
  3. Bibliothèque C ++ Machine Learning
  4. Fonction de hachage en C avec types
  5. Fonction de hachage en PHP avec syntaxe