Programmation D - Membres statiques d'une classe

Nous pouvons définir les membres de la classe staticen utilisant un mot-clé statique. Lorsque nous déclarons un membre d'une classe comme statique, cela signifie que peu importe le nombre d'objets de la classe créés, il n'y a qu'une seule copie du membre statique.

Un membre statique est partagé par tous les objets de la classe. Toutes les données statiques sont initialisées à zéro lorsque le premier objet est créé, si aucune autre initialisation n'est présente. Vous ne pouvez pas le mettre dans la définition de classe, mais il peut être initialisé en dehors de la classe comme dans l'exemple suivant en redéclarant la variable statique, en utilisant l'opérateur de résolution de portée :: pour identifier la classe à laquelle il appartient.

Essayons l'exemple suivant pour comprendre le concept de membres de données statiques -

import std.stdio;

class Box { 
   public: 
      static int objectCount = 0;

      // Constructor definition 
      this(double l = 2.0, double b = 2.0, double h = 2.0) { 
         writeln("Constructor called."); 
         length = l; 
         breadth = b; 
         height = h; 
          
         // Increase every time object is created
         objectCount++; 
      } 

      double Volume() { 
         return length * breadth * height; 
      }

   private: 
      double length;     // Length of a box 
      double breadth;    // Breadth of a box 
      double height;     // Height of a box 
};
  
void main() { 
   Box Box1 = new Box(3.3, 1.2, 1.5);    // Declare box1 
   Box Box2 = new Box(8.5, 6.0, 2.0);    // Declare box2  
   
   // Print total number of objects. 
   writeln("Total objects: ",Box.objectCount);  
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Constructor called. 
Constructor called. 
Total objects: 2

Membres de fonction statiques

En déclarant un membre de fonction comme statique, vous le rendez indépendant de tout objet particulier de la classe. Une fonction membre statique peut être appelée même si aucun objet de la classe n'existe etstatic les fonctions sont accessibles en utilisant uniquement le nom de classe et l'opérateur de résolution de portée ::.

Une fonction membre statique ne peut accéder qu'aux données membres statiques, aux autres fonctions membres statiques et à toutes les autres fonctions en dehors de la classe.

Les fonctions membres statiques ont une portée de classe et elles n'ont pas accès au thispointeur de la classe. Vous pouvez utiliser une fonction membre statique pour déterminer si certains objets de la classe ont été créés ou non.

Essayons l'exemple suivant pour comprendre le concept de membres de fonction statiques -

import std.stdio;

class Box { 
   public: 
      static int objectCount = 0; 
      
      // Constructor definition 
      this(double l = 2.0, double b = 2.0, double h = 2.0) { 
         writeln("Constructor called."); 
         length = l; 
         breadth = b; 
         height = h; 

         // Increase every time object is created 
         objectCount++; 
      }

      double Volume() {
         return length * breadth * height; 
      }

      static int getCount() { 
         return objectCount; 
      } 
   
   private: 
      double length;     // Length of a box 
      double breadth;    // Breadth of a box 
      double height;     // Height of a box 
};
  
void main() { 
   // Print total number of objects before creating object. 
   writeln("Inital Stage Count: ",Box.getCount());  
   
   Box Box1 = new Box(3.3, 1.2, 1.5);    // Declare box1 
   Box Box2 = new Box(8.5, 6.0, 2.0);    // Declare box2 
   
   // Print total number of objects after creating object. 
   writeln("Final Stage Count: ",Box.getCount()); 
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Inital Stage Count: 0 
Constructor called. 
Constructor called
Final Stage Count: 2