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