類的靜態成員


我們可以使用static關鍵字定義類的靜態成員。當我們宣告一個類的成員為靜態它意味著無論有多少的類的物件被建立,有靜態成員只有一個副本。

靜態成員是由類的所有物件共用。所有靜態資料被初始化為零,建立所述第一物件時,如果沒有其他的初始化存在。我們不能把它的類的定義,但它可以在類的外部被初始化為通過重新宣告靜態變數做在下面的範例中,使用範圍解析運算子::來確定它屬於哪個類。

讓我們試試下面的例子就明白了靜態資料成員的概念:

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);

}

當上面的程式碼被編譯並執行,它會產生以下結果:

Constructor called.
Constructor called.
Total objects: 2

靜態函式成員:

通過宣告一個函式成員為靜態的,把它獨立於類的任何特定物件。靜態成員函式可以被呼叫,即使存在的類的任何物件和靜態函式使用類名和作用域解析運算子::存取。

靜態成員函式只能存取靜態資料成員,其他的靜態成員函式,並從類以外的任何其他功能。

靜態成員函式有一個類範圍,他們沒有進入這個指標之類的。可以使用一個靜態成員函式來判斷是否已建立或不是類的一些物件。

讓我們試試下面的例子就明白了靜態成員函式的概念:

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());
}

讓我們編譯和執行上面的程式,這將產生以下結果:

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