Nous avons vu que les méthodes dune structure sont identiques pour toutes les instances, mais pas les champs. Cependant, il peut arriver que lon souhaite quune 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 ny a quun 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 lemployé en question est le patron, ou si cest 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 nest 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 daccéder aux membres statiques. Le premier consiste à utiliser une variable du type structure adéquat, et lopérateur point, comme pour tout autre membre :
fiche employe;fiche lepatron = *employe.patron;
Le second consiste à utiliser le nom de la structure et lopérateur de résolution de portée ::
, comme ceci :
fiche lepatron = *fiche::patron;
On observera au passage que ces deux écritures sont correctes car lopé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 dune même structure, est dêtre accessibles même si lon ne dispose daucune instance de la structure, en utilisant le nom de la structure suivi de ::
. De ce fait, de telles méthodes nont pas dargument caché this
.
Précédent | Sommaire | Suivant |