Pointeurs, références & allocation dynamique Rappels sur les fonctions Les spécificités du C++ Structures et classes Encapsulation des données Notions de constructeur et de destructeur Fonctions et classes amies Surcharge d'opérateur Héritage Notions de patrons de fonctions et de classes Introduction à la librairie standard STL
Compilation et directives de préprocesseur Convention d'écriture et organisation des programmes Écriture/lecture sur l'entrée/sortie standard Les membres données statiques Utilisation de enum et de typedef
Retour menu principal

Fonctions amies


De part l’encapsulation des données, les fonctions extérieures à une classe n’ont pas accès aux membres privés de cette classe… à l’exception des fonctions amies.

En effet en déclarant une fonction amie d’une classe A, cette fonction a accès à tous les membres de A, tout comme le ferait une méthode de A.

La “déclaration d’amitié” permet donc de déclarer dans une classe, les fonctions que l’on autorise à accéder à ses membres privés. Conceptuellement, cette notion va à l’encontre de l’encapsulation des données; les fonctions amies ne sont jamais indispensables, elles sont juste pratiques.

La syntaxe fait intervenir le mot clé friend et l’on distingue trois cas de figures selon la nature de la fonction

  1. Fonction extérieure amie d’une classe A

    class A
    {
      ...
      friend type nom_fonction_extérieure(...);
      ...
    };
    
  2. Fonction membre d’une classe B, amie de la classe A

    class A
    {
      ...
      friend type B::nom_méthode_de_A(...);
      ...
    };
    
  3. Toutes les méthodes d’une classe B sont amies de la classe A

    class A { ...  friend class B; ...  };
    

Remarques :