Fonctions et classes amies en C++

Classe amis : Une classe amis peut accéder aux membres privés et protégés d’une autre classe dans laquelle elle est déclarée comme ami. Il est parfois utile de permettre à une classe particulière d’accéder à des membres privés d’une autre classe.
 
 
Par exemple, la classe Carre peut être autorisée à accéder aux membres privés de Rectangle.

class Rectangle { 
private: 
   int x, y;
  
   //Maintenant la classe Carre peut accéder aux membres privés de Rectangle 
   friend class Carre; 
};

Fonction ami: une fonction ami peut avoir une autorisation spéciale pour accéder aux membres privés et protégés.

class Rectangle { 
private: 
   int x, y;
  
   friend int Carre::afficher(); 
   //Seule afficher() de la classe Carre peut accéder aux membres internes
};

 

Quelques points importants sur les fonctions et classes amies en C++:
  • Les amis ne devraient être utilisés qu’à des fins limitées. s’il y’a trop de fonctions ou de classes externes déclarées en tant qu’amis d’une classe, cela diminue la valeur de l’encapsulation dans la programmation orientée objet.
  • L’amitié n’est pas réciproque. Si la classe A est un ami de B, alors B ne deviendra pas automatiquement un ami de A.
  • Les classes amies ne sont pas héritée
 

Exemple d’une classe amie en C++
#include <iostream> 

using namespace std;

class A { 
private: 
    int a; 
  
public: 
    A() { a = 2; } 
    friend class B; // Classe ami
}; 
  
class B { 
private: 
    int b; 
  
public: 
    void afficherA(A& f) 
    { 
       //Puisque B est un ami de A, il peut accéder aux membres privés de A
       cout << "La valeur de a dans la classe A = " << f.a; 
    } 
}; 
  
int main() 
{ 
    A a; 
    B b; 
    b.afficherA(a); 
    return 0; 
}

La sortie :
 

 
 

Exemple d’une fonction amie en C++
#include <iostream> 
  
class B; 
  
class A { 
public: 
    void afficherB(B&); 
}; 
  
class B { 
private: 
    int b; 
  
public: 
    B() { b = 2; } 
    friend void A::afficherB(B& f); // Fonction amie
}; 
  
void A::afficherB(B& f) 
{ 
    //afficherB() étant ami de B, il peut accéder aux membres privés de B
    std::cout << "La valeur de b dans la classe B = " << f.b; 
} 
  
int main() 
{ 
    A a; 
    B b; 
    a.afficherB(b); 
    return 0; 
}

La sortie :
 

 
 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.