Статические члены класса


Предыдущая страница
Следующая страница  

Мы можем определить статические элементы класса, используя ключевое слово static. Когда мы объявляем элемент класса статическим, это означает, что независимо от того, сколько объектов класса создано, существует только одна копия статического члена.

Статический член разделяется всеми объектами класса. Все статические данные инициализируются значением по-умолчанию для своего типа данных при загрузке модуля, если нет никакой другой инициализации.

Попробуем следующий пример, чтобы понять концепцию статических данных:

import std.stdio;

class Box { 
   public: 
      static int objectCount = 0;

      // Объявление конструктора 
      this(double l = 2.0, double b = 2.0, double h = 2.0) { 
         writeln("Вызван конструктор."); 
         length = l; 
         breadth = b; 
         height = h; 
          
         // Увеличение каждый раз при создании объекта 
         objectCount++; 
      } 

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

   private: 
      double length;     // Длина коробки  
      double breadth;    // Ширина коробки 
      double height;     // Высота коробки 
};
  
void main() { 
   Box box1 = new Box(3.3, 1.2, 1.5);    // Объявление box1 
   Box box2 = new Box(8.5, 6.0, 2.0);    // Объявление box2  
   
   // Вывод общего количества объектов. 
   writeln("Всего объектов: ", Box.objectCount);  
}

Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:

Вызван конструктор.
Вызван конструктор.
Всего объектов: 2

Статические функции-члены

Объявляя функцию-член как статическую, вы делаете её независимой от какого-либо конкретного объекта класса. Статическая функция-член может быть вызвана, даже если объекты класса не существуют, и обращение к статическим функциям можно выполнять с использованием только имени класса через оператор доступа точка.

Статическая функция-член может получить доступ только к статической переменной-члену, другим статическим функциям-членам и любым другим функциям вне класса.

У статических функций-членов есть область видимости класса, и они не имеют доступа к указателю this класса. Вы можете использовать статическую функцию-член, чтобы определить, были ли созданы какие-либо объекты класса или нет.

Попробуем следующий пример, чтобы понять идею статических функций-членов:

import std.stdio;

class Box { 
   public: 
      static int objectCount = 0; 
      
      // Объявление конструктора 
      this(double l = 2.0, double b = 2.0, double h = 2.0) { 
         writeln("Вызван конструктор."); 
         length = l; 
         breadth = b; 
         height = h; 

         // Увеличение каждый раз при создании объекта 
         objectCount++; 
      }

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

      static int getCount() { 
         return objectCount; 
      } 
   
   private: 
      double length;     // Длина коробки 
      double breadth;    // Ширина коробки 
      double height;     // Высота коробки 
};
  
void main() { 
   // Вывод общего количества объектов перед созданием объекта. 
   writeln("Количество в начале: ", Box.getCount());  
   
   Box box1 = new Box(3.3, 1.2, 1.5);    // Объявление box1  
   Box box2 = new Box(8.5, 6.0, 2.0);    // Объявление box2 
   
   // Вывод общего количества объектов после создания объектов. 
   writeln("Количество в конце: ", Box.getCount()); 
} 

Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:

Количество в начале: 0
Вызван конструктор.
Вызван конструктор.
Количество в конце: 2

Предыдущая страница
Следующая страница