靜態成員

靜態成員變量

1.所有對象共享一份內存
2.在編譯階段分配內存
3.類內聲明,類外初始化

注意點

  1. 靜態成員一定要初始化(分配內存)

初始化格式 :<數據類型><類名>::<靜態數據成員名>=<值>

class Stu {
public:
	static int num;
}
int Stu::num=10;

爲神魔一定要初始化呢?
應該說“靜態成員變量需要定義”纔是準確的,而不是初始化。兩者的區別在於:初始化是賦一個初始值,而定義是分配內存。靜態成員變量在類中僅僅是聲明,沒有定義,所以要在類的外面定義,實際上是給靜態成員變量分配內存。

class Stu {
public:
	static int num;
}
int main(){
cout<<Stu::num;
}

編譯以上代碼會出現“對‘Stu::num’未定義的引用”錯誤。這是因爲靜態成員變量num 未定義,也就是還沒有分配內存,顯然是不可以訪問的

2. 靜態數據成員的訪問

2.1 通過對象訪問

class Stu {
public:
	static int num;
}
int Stu:num=5;
int main(){
	Stu s;
	s.num;//通過對象訪問
}

2.1通過 類名訪問 <類名>::<靜態成員名>

class Stu {
public:
	static int num;
}
int Stu:num=5;
int main(){
	Stu::num;//通過對象訪問
}

靜態成員函數

所用對象共向一個函數
靜態成員函數只能訪問靜態成員變量

注意點:爲什麼靜態成員函數不能訪問非靜態成員變量?

1.靜態成員函數只屬於類本身,隨着類的加載而存在,不屬於任何對象,是獨立存在的 ,非靜態成員當且僅當實例化對象之後才存在,靜態成員函數產生在前,非靜態成員函數產生在後,故不能訪問

2.內部訪問靜態成員用self::,而訪問非靜態成員要用this指針,靜態成員函數沒有this指針,故不能訪問。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章