Portée des membres

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Portée des membres - Index

Dans les fonctions inline et les exceptions, l'expression X::func() de l'exemple utilise le nom de classe X avec le modificateur d'accès de portée pour indiquer que func, bien que définie "hors" de la classe, est en réalité une fonction membre de X et qu'elle existe dans la portée de X. L'influence de X:: s'étend au corps de la définition. Ceci explique pourquoi la valeur i renvoyée par func se réfère à X::i, la valeur char* i de X, et non pas à la valeur globale int i. Sans le modificateur X::, la fonction func représenterait une fonction ordinaire de type non classe, renvoyant la valeur globale int i.

Toutes les fonctions membres figurent donc dans la portée de leur classe, même si elles sont définies à l'extérieur de cette classe.

Les données membres d'une classe X peuvent être référencées à l'aide des opérateurs de sélection . et -> (comme avec les structures C). Il est également possible d'appeler les fonctions membres avec ces opérateurs (Voir le mot clé this). Par exemple :

class X {
public:
   int i;
   char name[20];
   X *ptr1;
   X *ptr2;
   void Xfunc(char*data, X* left, X* right);   // define elsewhere
};
void f(void);
{
   X x1, x2, *xptr=&x1;
   x1.i = 0;
   x2.i = x1.i;
   xptr->i = 1;
   x1.Xfunc("stan", &x2, xptr);
}

Si m est un membre ou un membre de base de la classe X, l'expression X::m est dite nom qualifé ; elle est du même type que m, et est une lvalue uniquement si m m une lvalue. Un point déterminant est que, même si le nom de classe X est caché par un nom non-type, le nom qualifié X::m accédera au membre de classe adéquat, c'est-à-dire m.

Les membres de classe ne peuvent pas être ajoutés à une classe dans une autre section de votre programme. La classe X ne peut pas contenir des objets de la classe X, ne peut pas contenir des objets de la classe X (remarquez la similitude avec les types d'union et de structure du C).

Voir aussi