一、c++靜態成員變量
在C++中,靜態成員變量(Static Member Variable)是類的一種特殊類型的成員變量,它被類的所有實例共享,而不是每個實例都有自己的副本。靜態成員變量在類的所有對象之間保持唯一的狀態,具有一些特殊的用途和語法。
1、概念:
靜態成員變量是類的成員變量,但不是依賴于類的實例而存在的。它在類的所有實例之間共享相同的內存位置,因此在類的所有對象之間保持唯一的狀態。
靜態成員變量在類的聲明中使用static關鍵字來定義,并在類的實現文件中進行初始化(換句話說就是不能在類中進行初始化)。
2、使用方法:
①、聲明靜態成員變量:
在類的聲明中,使用static關鍵字聲明靜態成員變量。聲明通常在類的public、private或protected部分。
②、初始化靜態成員變量:(不能在類里面進行初始化)
靜態成員變量需要在類的實現文件中進行初始化。在類外部,使用類名和作用域解析操作符::來初始化靜態成員變量。
③、訪問靜態成員變量:
靜態成員變量不屬于類的實例,因此可以使用類名和作用域解析操作符來訪問,也可以在類的成員函數中通過this指針訪問。
案例:
#include <iostream>
using namespace std;
class MyClass {public:/**聲明靜態成員變量*靜態成員變量在編譯階段就已經分配了內存,存在全局靜態區*/static int staticVar;MyClass() {// 在構造函數中修改靜態成員變量staticVar++;}// 靜態成員函數,用于訪問靜態成員變量static void printStaticVar() {cout << "Static variable value: " << staticVar << endl;}
};// 初始化靜態成員變量
int MyClass::staticVar = 0;//在類外初始化int main() {MyClass obj1;MyClass::printStaticVar(); // 訪問靜態成員變量MyClass obj2;MyClass::printStaticVar(); // 訪問靜態成員變量return 0;
}
3、總結
①靜態成員變量在內存中只有一份,多個對象共享一個靜態變量
②靜態成員變量,必須類內聲明,類外定義
③靜態成員變量可以通過類的作用域訪問
④靜態成員變量可以通過類的對象訪問
二、靜態成員函數
1、概念:
靜態成員函數(Static Member Function):
靜態成員函數是不依賴于類的實例的成員函數。它們可以通過類名和作用域解析操作符::直接訪問。靜態成員函數不能訪問非靜態成員變量,也不能使用this指針。
2、特點:
①靜態成員函數能訪問靜態成員變量不能訪問普通的成員變量
②可以通過類的作用域訪問靜態成員函數
③可以通過對象訪問靜態成員函數
案例代碼
#include <iostream>
using namespace std;
class MyClass {private:int regularVar; // 普通成員變量static int staticVar; // 靜態成員變量public:MyClass(int regValue, int statValue) : regularVar(regValue) {staticVar = statValue;}static void staticFunction() {// 靜態成員函數可以訪問靜態成員變量,但不能訪問普通成員變量cout << "Static member function accessing staticVar: " << staticVar<< endl;// 下面一行會引發編譯錯誤,因為靜態函數不能訪問普通成員變量// cout << "Static member function accessing regularVar: " <<// regularVar << endl;}void regularFunction() {cout << "Regular member function accessing regularVar: " << regularVar<< endl;}
};// 初始化靜態成員變量
int MyClass::staticVar = 0;int main() {// 使用類的作用域訪問靜態成員函數MyClass::staticFunction();MyClass obj(42, 100);obj.regularFunction();// 通過對象訪問靜態成員函數obj.staticFunction(); // 也可以通過對象訪問,但是不推薦,最好使用類名訪問return 0;
}
三、const修飾的靜態成員變量
①const修飾的靜態成員變量保存在常量區,只讀的,在內存中只有一份
②const修飾的靜態成員變量可以在類內定義且初始化
③const修飾的靜態成員變量可以通過類的作用域訪問
④const修飾的靜態成員變量可以通過對象訪問
⑤靜態成員函數可以訪問const修飾的靜態成員變量
代碼案例:
#include <iostream>
using namespace std;class MyClass {public:// 在類內部定義且初始化帶有const修飾的靜態成員變量static const int staticConstVar = 42;static void printStaticConstVar() {// 靜態成員函數可以訪問const修飾的靜態成員變量cout << "Static const variable value: " << staticConstVar << endl;}
};int main() {// 通過類的作用域訪問const修飾的靜態成員變量cout << "Accessing via class scope: " << MyClass::staticConstVar << endl;// 通過對象訪問const修飾的靜態成員變量MyClass obj;cout << "Accessing via object: " << obj.staticConstVar << endl;// 調用靜態成員函數,訪問const修飾的靜態成員變量MyClass::printStaticConstVar();return 0;
}