Fonctions amies en C++ et cas d'utilisation avec exemples

Publié: 2022-10-22

Le masquage de données est une technique de développement logiciel fondamentale largement utilisée dans les langages de programmation orientés objet (POO). Il limite l'accès aux membres de données privées de l'extérieur de la classe. Cependant, une fonctionnalité C++ connue sous le nom de fonction friend va à l'encontre du principe de masquage des données.

Dans cet article, vous apprendrez ce qu'est la fonction friend en C++ , ce qu'est une classe friend et explorerez quelques cas d'utilisation avec des exemples.

Consultez nos cours de technologie gratuits pour vous démarquer de la concurrence.

Table des matières

Qu'est-ce que la fonction friend en C++ ?

Une fonction amie en C++ est une fonction déclarée en dehors d'une classe mais qui a accès aux membres privés et protégés de la classe. Bien que les membres privés d'une classe particulière soient inaccessibles aux fonctions non membres, les déclarer comme fonctions amies leur donne accès aux membres privés et protégés des classes.

Découvrez la certification avancée d'upGrad en DevOps

Caractéristiques de la fonction ami

La fonction friend en C++ a les caractéristiques suivantes :

  • La fonction friend est en dehors de la portée de la classe à laquelle elle a été déclarée amie
  • Une fonction amie peut être soit un membre d'une classe, soit une fonction déclarée en dehors de la portée de la classe
  • La fonctionnalité d'ami n'est pas limitée à une seule classe.

Explorez nos cours populaires de génie logiciel

Master of Science en informatique de LJMU & IIITB Programme de certificat de cybersécurité Caltech CTME
Bootcamp de développement de la pile complète Programme PG dans Blockchain
Programme exécutif PG en développement Full Stack
Voir tous nos cours ci-dessous
Cours de génie logiciel

  • Invoquer une fonction amie revient à invoquer n'importe quelle fonction normale de la classe sans utiliser l'objet
  • Nous ne pouvons pas invoquer la fonction friend en utilisant l'objet car il n'est pas dans la portée de la classe
  • Les fonctions amies en C++ ont des objets comme arguments
  • On peut déclarer une fonction ami soit dans la partie privée soit dans la partie publique
  • Les noms des membres ne sont pas directement accessibles à une fonction amie, et elle doit utiliser l'opérateur d'appartenance point et le nom de l'objet avec le nom du membre

Découvrez la certification avancée d'upGrad en cybersécurité

Syntaxe de la fonction Friend

Pour déclarer la fonction friend, nous utilisons le mot-clé friend dans le corps de la classe. La syntaxe de la fonction friend est :

classe nom_classe {

… .. …

ami returnType functionName (liste d'arguments);

… .. …

}

Compétences en développement de logiciels à la demande

Cours JavaScript Cours Java de base Cours de Structures de Données
Cours Node.js Cours SQL Cours de développement full stack
Cours NFT Cours DevOps Cours Big Data
Cours React.js Cours de cybersécurité Cours d'informatique en nuage
Cours de conception de bases de données Cours Python Cours de crypto-monnaie

Si nous décomposons la syntaxe, voici ce que signifie chaque terme :

  • ami est le mot-clé indiquant que la fonction est une fonction amie
  • returnType est le type de retour de la fonction
  • functionName est le nom de la fonction qui est devenu un ami de la classe
  • arg list est les arguments que nous allons passer

Apprenez des cours de développement de logiciels en ligne dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.

Exemple de fonction amie C++

Maintenant, regardons quelques programmes pour illustrer la fonction ami.

Exemple 1 : fonction ami C++ pour imprimer la hauteur d'une boîte

#include <iostream>

en utilisant l'espace de noms std ;

boîte de classe

{

privé:

hauteur entière ;

Publique:

Boîte() : hauteur(0) { }

ami int printHeight(Box); //fonction amie

} ;

int printHeight(Box h)

{

h.hauteur += 40 ;

renvoie h.hauteur ;

}

int main()

{

Case h ;

cout<<"Hauteur de la boîte : "<< printHeight(h)<<endl ;

renvoie 0 ;

}

Lisez nos articles populaires liés au développement de logiciels

Comment implémenter l'abstraction de données en Java ? Qu'est-ce que la classe interne en Java ? Identificateurs Java : définition, syntaxe et exemples
Comprendre l'encapsulation dans OOPS avec des exemples Arguments de ligne de commande en C expliqués Top 10 des fonctionnalités et caractéristiques du cloud computing en 2022
Polymorphisme en Java : concepts, types, caractéristiques et exemples Packages en Java et comment les utiliser ? Tutoriel Git pour les débutants : Apprenez Git à partir de zéro

Production:

Hauteur de la boîte : 40

Exemple 2 : Lorsque la fonction friend C++ est compatible avec deux classes

#include <iostream>

en utilisant l'espace de noms std ;

// déclaration vers l'avant

classe ClasseQ ;

classe ClasseP {

Publique:

// constructeur pour initialiser numP à 12

ClasseP() : numP(12) {}

privé:

int numP ;

// déclaration de la fonction amie

ami int add(ClassP, ClassQ);

} ;

classe ClasseQ {

Publique:

// constructeur pour initialiser numQ à 1

ClasseQ() : numQ(1) {}

privé:

int numQ ;

// déclaration de la fonction amie

ami int add(ClassP, ClassQ);

} ;

// accède aux membres des deux classes

int add(ClassP objectP, ClassQ objectQ) {

return (objectP.numP + objectQ.numQ);

}

int main() {

objetP de classeP ;

objet de classeQ ;

cout << "Somme : " << add(objectP, objectQ);

renvoie 0 ;

}

Production:

Somme : 13

Dans l'exemple ci-dessus, la classe P et la classe Q ont déclaré add() en tant que fonction amie, lui donnant accès aux données privées des deux classes. De plus, la fonction friend à l'intérieur de la classe P utilise la classe Q.

Donc, nous faisons une déclaration en avant de la classe Q dans le programme.

Implémentation d'une fonction d'ami

Pour avoir une meilleure idée de la fonction friend en C++, nous allons maintenant examiner les deux manières d'implémenter la fonction friend.

  1. Implémentation d'une fonction friend en C++ via une méthode d'une autre classe

Nous déclarons une classe amie en C++ lorsque nous avons besoin d'accéder aux membres privés et protégés d'une autre classe dans laquelle elle a été déclarée amie. Il est également possible de déclarer une seule fonction membre d'une autre classe comme amie.

classe nom_classe

{

classe ami friend_class;// déclaration de la classe ami

} ;

classe ami_classe

{

} ;

Dans la déclaration ci-dessus de la classe friend, toutes les fonctions de friend_class sont les fonctions friend de class_name .

Voici un exemple simple pour illustrer l'implémentation de fonctions amies via une méthode d'une autre classe :

#include <iostream>

en utilisant l'espace de noms std ;

Classe A

{

entier p=4 ;

ami classe B; // classe amie

} ;

classe B

{

Publique:

annuler l'affichage (A &a)

{

cout<<"La valeur de p est :" <<ap ;

}

} ;

int main ()

{

Un un;

Bb;

  1. afficher (a);

renvoie 0 ;

}

Production:

La valeur de p est : 4

  1. Implémentation d'une fonction globale

L'implémentation d'une fonction amie globale nous permet d'accéder à tous les membres protégés et privés de la déclaration de classe globale. Voici un exemple :

#include<iostream>

en utilisant l'espace de noms std ;

espace de classe

{

int un ;

entier b ;

entier c ;

Publique:

void setdata (int x, int y, int z);

affichage vide (vide);

ami void opérateur- (espace &s);

} ;

espace vide :: setdata (int x, int y, int z)

{

un=x ; b=y ; c=z;

}

espace vide :: affichage (vide)

{

cout<<a<<" "<<b<<" "<<c<<"\n" ;

}

opérateur vide - (espace & s)

{

sa =- sa;

qn =- qn ;

sc =- sc ;

}

int main ()

{

les espaces;

  1. setdata (9,2,3);

cout<<“s:”;

  1. affichage ();

-s ;

cout<<"-s :" ;

  1. affichage ();

renvoie 0 ;

}

Production:

s : 9 2 3

-s : -9 -2 -3

Dans l'exemple de programme ci-dessus, operator- est la fonction amie que nous avons globalement déclarée dans la portée de la classe.

Qu'est-ce qu'une classe d'amis en C++ ?

Bien que ce soit assez évident maintenant, une classe amie est une classe qui a accès à la fois aux membres privés et protégés de la classe dans laquelle elle est déclarée amie.

En termes simples, une classe friend en C++ est utilisée lorsque nous voulons qu'une classe ait accès aux membres privés et protégés d'une autre classe.

Les fonctions membres de la classe que nous déclarons comme amies d'une autre classe sont des fonctions amies de la classe amie. Ainsi, les fonctions amies relient les deux classes.

Syntaxe de la classe Friend

Voici la syntaxe d'une classe friend en C++ :

classe R; //déclaration vers l'avant

classe P{

// Autres déclarations

classe d'amis R ;

} ;

classe R{

// Déclarations

} ;

Dans l'illustration ci-dessus, la classe R est un ami de la classe P. Par conséquent, la classe R peut accéder aux données privées membres de la classe P. Cependant, l'inverse n'est pas vrai et la classe P ne peut pas accéder aux données privées membres de la classe R. .

De plus, la déclaration en avant est donnée pour informer le compilateur de l'existence d'une entité avant qu'elle ne soit définie catégoriquement. Ici, nous déclarons la classe R en utilisant une déclaration directe pour informer le compilateur de son existence. La déclaration forward nous permet d'utiliser les objets de la classe R dans la classe P.

A quoi sert la fonction friend en C++ ?

Pour résumer notre discussion, examinons les deux principales utilisations de la fonction friend en C++ :

  • Tout d'abord, nous utilisons la fonction friend lorsque nous voulons accéder aux membres privés et protégés d'une classe. Pour ce faire, nous aurions généralement besoin que les objets de cette classe accèdent aux membres privés et protégés. Cependant, la fonction friend élimine la situation où la fonction doit être un membre de la classe pour y accéder.
  • Une autre utilisation de la fonction friend en C++ est la surcharge d'opérateur. Les fonctions ayant le même nom mais des nombres et des arguments différents sont appelées fonctions de surcharge. Les fonctions amies en C++ trouvent une utilisation dans la surcharge d'opérateurs.

Dans ce cas, la fonction de surcharge de l'opérateur précède le mot-clé friend et déclare une portée de classe de fonction. Lorsqu'ils sont surchargés par la fonction friend, les opérateurs binaires prennent deux arguments explicites tandis que les opérateurs unaires prennent un argument. Cela fonctionne de la même manière qu'une fonction d'opérateur binaire, sauf que l'implémentation de la fonction d'opérateur ami a lieu en dehors de la portée de la classe.

Cela nous amène à la fin de notre discussion sur la fonction friend en C++ et ses utilisations. J'espère que cela vous aidera à approfondir vos connaissances en C++.

De plus, si vous cherchez à lancer votre carrière en tant que développeur full-stack, upGrad propose un programme de troisième cycle exécutif entièrement en ligne en développement de logiciels - Spécialisation en développement Full Stack de 13 mois en collaboration avec IIIT Bangalore.

Faits saillants du programme :

  • Exposition pratique à des études de cas et à des missions pertinentes pour l'industrie
  • Plus de 450 heures d'apprentissage à 360 degrés
  • 10+ meilleurs outils et langages de programmation
  • Séances de mentorat de carrière 1: 1 avec des mentors de l'industrie
  • Assistance aux étudiants 24h/24 et 7j/7

Inscrivez-vous dès aujourd'hui pour bénéficier des avantages exclusifs upGrad dès aujourd'hui !

Qu'est-ce que la fonction friend en C++ ?

Une fonction amie en C++ est une fonction qui n'est pas membre d'une classe mais qui a accès à ses membres privés et protégés.

Comment déclarer une fonction ami ?

Une fonction amie a accès aux données privées et protégées d'une classe. Pour déclarer une fonction friend, nous utilisons le mot-clé friend dans le corps de la classe.

Comment se faire un ami de classe en C++ ?

Nous utilisons le mot-clé friend pour déclarer une classe en tant que classe friend en C++. Le mot-clé permet à n'importe quelle classe d'accéder aux membres privés et protégés d'autres classes et fonctions.