Membres statiques

Nous avons vu que les méthodes d’une structure sont identiques pour toutes les instances, mais pas les champs. Cependant, il peut arriver que l’on souhaite qu’une donnée soit partagée par toutes les instances de la classe. Nous en verrons des exemples dans la suite.

Pour cela, il suffit de déclarer le champ comme statique, avec le mot clé static que nous connaissons déjà. Par exemple, chaque employé a un supérieur direct, mais il n’y a qu’un seul patron :

struct fiche {     fiche *superieur;        // supérieur direct     static fiche *patron;    // le PDG     char *nom, *prenom;     int age;     int estpatron(void)         { return (this == patron); }     int estdirecteur(void)         { return (superieur == patron); }     };

Nous avons ajouté deux méthodes qui indiquent si l’employé en question est le patron, ou si c’est un directeur (employé dont le supérieur direct est le patron).

Les membres statiques permettent d’économiser des variables globales. Ils sont initialisés à zéro comme toute variable statique ; il n’est pas possible de leur donner une autre valeur initiale (mais les constructeurs suppléent à ce défaut, comme on le verra plus loin).

Il existe deux moyens d’accéder aux membres statiques. Le premier consiste à utiliser une variable du type structure adéquat, et l’opérateur point, comme pour tout autre membre :

fiche employe;fiche lepatron = *employe.patron;

Le second consiste à utiliser le nom de la structure et l’opérateur de résolution de portée ::, comme ceci :

fiche lepatron = *fiche::patron;

On observera au passage que ces deux écritures sont correctes car l’opérateur de déréférencement * a une précédence plus faible que le point . et que :: (voir annexe).

Il est également permis de créer des méthodes statiques. Le principal intérêt de telles méthodes, par rapport aux autres qui sont de toute façon également partagées par toutes les instances d’une même structure, est d’être accessibles même si l’on ne dispose d’aucune instance de la structure, en utilisant le nom de la structure suivi de ::. De ce fait, de telles méthodes n’ont pas d’argument caché this.

Précédent Précédent Sommaire Sommaire Suivant Suivant