C++基礎之static關鍵字(2)--靜態成員變數詳解
本篇文章主要講解C++基礎中static關鍵字的靜態成員變數並進行例項演示。
一.靜態成員變數定義
類的成員變數被宣告為static,意味著它為該類的所有例項共享,也就是說當某個類的例項修改了該靜態成員變數,其修改值為該類的其它所有例項所見。
靜態與非靜態變數
靜態成員:靜態類中的成員加入static修飾符,即是靜態成員。可以直接使用"類名.靜態成員名"訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員函式不能訪問非靜態的成員,非靜態成員函式可以直接訪問類中靜態的成員。
非靜態成員:所有沒有加static的成員都是非靜態成員,當類被例項化之後,可以通過例項化的類名進行訪問,非靜態成員的生存期決定於該類的生存期,而靜態成員則不存在生存期的概念,因為靜態成員始終駐留在記憶體中。
二.例項演示靜態成員變數
根據前面所講,靜態成員變數為該類的所有例項共享,那麼,該類的所有例項物件都可以訪問此靜態成員變數。
Test.h
class student{
public:
student(char* name, int age, float score);
public:
static int total; //靜態成員變數
private:
char* name;
int age;
float score;
};
Test.cpp
int student::total = 0; student::student(char *name, int age, float score) { total++;//操作靜態成員變數,實現類之間的聯絡 cout<<name<<"的年齡是"<<age<<",成績是"<<score<<"(當前共有"<<total<<"名學生)"<<endl; } int main() { student stu1("小明", 15, 90); student stu2("小紅", 16, 94); student stu3("小李", 15, 91); return 0; }
執行結果:
分析:
我們定義了一個學生類,其中記錄了學生的姓名,年齡和成績,然後定義了一個靜態成員變數total,用來記錄學生個數,可以發現,這個total是屬於類所擁有的,我們每次例項化一個物件,total就會加1,這樣就實現了不同例項物件間的聯絡。
注意:
1).一個類中可以有一個或多個靜態成員變數,所有的物件都共享這些靜態成員變數,都可以引用它。
2).static成員變數不隨物件的建立而分配記憶體,也不隨物件的銷燬而釋放記憶體。普通成員變數在物件建立時分配記憶體,在物件銷燬時釋放記憶體。
3).靜態成員變數必須初始化,而且只能在類體外進行。
演示類的例項物件更改靜態成員變數
Test.h
class student{
static int variable;
};
Test.cpp
int student::variable = 0;
int main()
{
student stu4;
student stu5;
cout<<stu4.variable<<endl;
cout<<stu5.variable<<endl;
stu4.variable=1;//修改靜態成員變數
cout<<stu4.variable<<endl;
cout<<stu5.variable<<endl;
return 0;
}
結果:
分析:
初始化靜態成員變數為0,類的例項stu4和stu5都可以訪問為0,其中stu4修改靜態成員變數為1,那麼stu5得到的值也會變為1。
也可以使用類名::靜態成員變數的方法來訪問靜態成員變數(非靜態成員變數不可)。
stu4.variable=1;//修改靜態成員變數
cout<<student::variable<<endl;//使用類名::靜態成員變數訪問
結果: