On souhaite parfois quune méthode dune classe puisse accéder aux parties privées dune autre classe. Pour cela, il suffit de déclarer la méthode friend
également, en utilisant son nom complet (nom de classe suivi de ::
et du nom de la méthode). Par exemple :
class autre { // ... void combine(exemple); }; class exemple { // ...parties privées public : friend void autre::combine(exemple); }; void autre::combine(exemple ex) { // utilise les membres privés de ex }
La fonction combine
, qui fait une modification quelconque de linstance de autre
qui lappelle, à laide des données contenues dans une instance de exemple
, a libre accès aux parties privées des deux classes.
On aurait pu aussi écrire une fonction amie des deux classes :
class exemple { // ...parties privées public : friend void combine(autre&, exemple); };class autre { // ... friend void combine(autre&, exemple); };void combine(autre& au, exemple ex){ // accède aux membres des deux arguments}
mais la syntaxe dappel est alors différente : combine(au,ex)
contre au.combine(ex)
.
Précédent | Sommaire | Suivant |