Partager via


Données membres static (C++)

les classes peuvent contenir des données et des fonctions membres de membre statique.Lorsqu'un membre de données est déclarée comme statique, une seule copie des données est conservée pour tous les objets de la classe.(Pour plus d'informations, consultez Fonctions membres static.)

Les données membres static ne font pas partie d'objets d'un type donné de classe ; elles sont des objets séparés.Par conséquent, la déclaration d'une donnée membre statique n'est pas considérée comme une définition.La donnée membre est déclarée dans la portée de la classe, mais la définition est exécutée à la portée du fichier.Ces membres statiques sont une liaison externe.L'exemple suivant illustre ce comportement :

// static_data_members.cpp
class BufferedOutput
{
public:
   // Return number of bytes written by any object of this class.
   short BytesWritten()
   {
      return bytecount;
   }

   // Reset the counter.
   static void ResetCount()
   {
      bytecount = 0;
   }

   // Static member declaration.
   static long bytecount;
};

// Define bytecount in file scope.
long BufferedOutput::bytecount;

int main()
{
}

Dans le code précédent, le membre bytecount est déclaré dans la classe BufferedOutput, mais elle doit être définie en dehors de la déclaration de classe.

Les données membres static ne peuvent être référencées sans faire référence à un objet de type classe.Le nombre d'octets écrits à l'aide de objets d' BufferedOutput peut être obtenu comme suit :

long nBytes = BufferedOutput::bytecount;

pour que le membre statique existe, il n'est pas nécessaire que tous les objets du type de classe existent.Les membres statiques peuvent également accessibles à l'aide de les opérateurs de sélection des membres (. et - >).Par exemple :

BufferedOutput Console;

long nBytes = Console.bytecount;

Dans le premier cas, la référence à l'objet (Console) n'est pas évaluée ; la valeur retournée est celle de l'objet statique bytecount.

Les données membres statiques sont soumises à des règles d'accès de membre de classe, donc l'accès privé aux données membres static est autorisé uniquement pour les fonctions et friends de membre de classe.ces règles sont décrites dans Contrôle d'accès de membre.L'exception est que les données membres static doivent être définies dans la portée du fichier indépendamment de leur restrictions d'accès.Si les données membre doit être explicitement initialisée, un initialiseur doit être instrumenté de définition.

le type d'un membre statique n'est pas qualifié par son nom de classe.par conséquent, le type d' BufferedOutput::bytecount est long.

Voir aussi

Référence

Classes, structures, unions et