1. 程式人生 > 其它 >C++基礎之static關鍵字(2)--靜態成員變數詳解

C++基礎之static關鍵字(2)--靜態成員變數詳解

技術標籤:C++c++

本篇文章主要講解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;//使用類名::靜態成員變數訪問

結果:
在這裡插入圖片描述

在這裡插入圖片描述