位置:首頁 > 高級語言 > C++教學 > C++類的靜態成員

C++類的靜態成員

我們可以使用static關鍵字定義類成員靜態。當我們聲明一個類的成員,靜態這意味著無論怎樣類的許多對象被創建,靜態成員隻有一個副本。

靜態成員是由類的所有對象共享。所有靜態數據被初始化為零,創建所述第一對象時,如果冇有其他的初始化存在。我們不能把類定義,但它可以在類的外部被初始化為通過重新聲明靜態變量,使用範圍解析操作符 :: 來確定它屬於哪個類來完成,看看在下麵的例子。

讓我們試試下麵的例子就明白了靜態數據成員的概念:

#include <iostream>
 
using namespace std;

class Box
{
   public:
      static int objectCount;
      // Constructor definition
      Box(double l=2.0, double b=2.0, double h=2.0)
      {
         cout <<"Constructor called." << endl;
         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
};

// Initialize static member of class Box
int Box::objectCount = 0;

int main(void)
{
   Box Box1(3.3, 1.2, 1.5);    // Declare box1
   Box Box2(8.5, 6.0, 2.0);    // Declare box2

   // Print total number of objects.
   cout << "Total objects: " << Box::objectCount << endl;

   return 0;
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

Constructor called.
Constructor called.
Total objects: 2

靜態函數成員:

通過聲明函數成員為靜態的,它獨立於類的任何特定對象。靜態成員函數可以即使不需要類對象的存在,並且靜態函數隻使用類名使用解析操作符::直接調用。

靜態成員函數隻能訪問靜態數據成員,不能訪問靜態成員函數和類以外的任何其他功能。

靜態成員函數有一個類範圍,他們冇有進入類的this指針。可以使用一個靜態成員函數,以確定是否已創建類的一些對象。

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

#include <iostream>
 
using namespace std;

class Box
{
   public:
      static int objectCount;
      // Constructor definition
      Box(double l=2.0, double b=2.0, double h=2.0)
      {
         cout <<"Constructor called." << endl;
         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
};

// Initialize static member of class Box
int Box::objectCount = 0;

int main(void)
{
  
   // Print total number of objects before creating object.
   cout << "Inital Stage Count: " << Box::getCount() << endl;

   Box Box1(3.3, 1.2, 1.5);    // Declare box1
   Box Box2(8.5, 6.0, 2.0);    // Declare box2

   // Print total number of objects after creating object.
   cout << "Final Stage Count: " << Box::getCount() << endl;

   return 0;
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

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