Portée des membres

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Portée des membres - Index

L'expression X::func() de l'exemple illustré dans Fonctions et exceptions inline 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);   // définition ailleurs
 };
 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 qualifié ; elle est du même type que m, et est une lvalue uniquement si m est 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, mais uniquement des pointeurs ou des références à des objets de la classe X (remarquez la similitude avec les types d'union et de structure du C).

Voir aussi