Rappels
En C++, l’unité de protection est la classe, et non pas l’objet. Cela signifie qu’une
fonction membre d’une classe peut accéder à tous les membres privés de n’importe
quel objet de sa classe. En revanche, ces membres privés restent inaccessibles à
n’importe quelle fonction membre d’une autre classe ou à n’importe quelle fonction
indépendante.
La notion de fonction amie, ou plus exactement de « déclaration d’amitié », permet de
déclarer dans une classe les fonctions que l’on autorise à accéder à ses membres privés
(données ou fonctions). Il existe plusieurs situations d’amitié.
Fonction indépendante, amie d’une classe A
class A
{
......
friend --- fct (-----) ;
.....
}
La fonction fct ayant le prototype spécifié est autorisée à accéder aux membres privés
de la classe A.
Fonction membre d’une classe B, amie d’une autre classe
A
class A
{
.....
friend --- B:fct (-----) ;
.....
} ;
La fonction fct, membre de la classe B, ayant le prototype spécifié, est autorisée à
accéder aux membres privés de la classe A.
Pour qu’il puisse compiler convenablement la déclaration de A, donc en particulier la
déclaration d’amitié relative à fct, le compilateur devra connaître la déclaration de B
(mais pas nécessairement sa définition).
Généralement, la fonction membre fct possédera un argument ou une valeur de retour de
type A (ce qui justifiera sa déclaration d’amitié). Pour compiler sa déclaration (au sein
de la déclaration de A), il suffira au compilateur de savoir que A est une classe ; si sa
186
En C++, l’unité de protection est la classe, et non pas l’objet. Cela signifie qu’une
fonction membre d’une classe peut accéder à tous les membres privés de n’importe
quel objet de sa classe. En revanche, ces membres privés restent inaccessibles à
n’importe quelle fonction membre d’une autre classe ou à n’importe quelle fonction
indépendante.
La notion de fonction amie, ou plus exactement de « déclaration d’amitié », permet de
déclarer dans une classe les fonctions que l’on autorise à accéder à ses membres privés
(données ou fonctions). Il existe plusieurs situations d’amitié.
Fonction indépendante, amie d’une classe A
class A
{
......
friend --- fct (-----) ;
.....
}
La fonction fct ayant le prototype spécifié est autorisée à accéder aux membres privés
de la classe A.
Fonction membre d’une classe B, amie d’une autre classe
A
class A
{
.....
friend --- B:fct (-----) ;
.....
} ;
La fonction fct, membre de la classe B, ayant le prototype spécifié, est autorisée à
accéder aux membres privés de la classe A.
Pour qu’il puisse compiler convenablement la déclaration de A, donc en particulier la
déclaration d’amitié relative à fct, le compilateur devra connaître la déclaration de B
(mais pas nécessairement sa définition).
Généralement, la fonction membre fct possédera un argument ou une valeur de retour de
type A (ce qui justifiera sa déclaration d’amitié). Pour compiler sa déclaration (au sein
de la déclaration de A), il suffira au compilateur de savoir que A est une classe ; si sa
186
