一. 類的靜態(tài)成員
? ? ? ?大家應(yīng)該都知道靜態(tài)變量庵寞,就是在變量前面加上static涨醋,類的靜態(tài)成員也是同樣的道理挪钓,在類的成員函數(shù)與成員變量前面加上static聲明為類的靜態(tài)成員痹愚。和靜態(tài)變量的原理一樣,不管這個(gè)類創(chuàng)建了多少個(gè)對(duì)象,靜態(tài)成員只有一個(gè)拷貝外恕,這個(gè)拷貝是被所有這個(gè)類的對(duì)象共享的晕换。
二. 類的靜態(tài)成員變量
(一)定義
? ? ? ?類的靜態(tài)變量即是在類中,用關(guān)鍵字static聲明成員變量磅摹。無(wú)論建立了多少個(gè)對(duì)象滋迈,都只有一個(gè)靜態(tài)變量的拷貝霎奢。靜態(tài)成員變量,不屬于某一個(gè)類對(duì)象饼灿,而只是屬于這個(gè)類幕侠,對(duì)于所有類對(duì)象時(shí)共享的。
(二)重點(diǎn)記憶
1. 類的靜態(tài)變量的分配空間
? ? ? ?類的靜態(tài)變量赔退,在編譯階段就已經(jīng)分配了空間橙依,即還沒(méi)有創(chuàng)建類對(duì)象時(shí),就已經(jīng)分配空間硕旗。
? ? ? ? 理解:同static變量一樣窗骑,類的靜態(tài)變量也是在編譯階段就分配好了空間。
2. 在為類對(duì)象分配空間中不包括靜態(tài)成員所占空間漆枚。
? ? ? ?理解:因?yàn)殪o態(tài)變量并不屬于某個(gè)類對(duì)象创译,它是共享的,因此獨(dú)立的類對(duì)象分配空間是不包括靜態(tài)成員的空間的墙基。
3. 類的靜態(tài)變量可以通過(guò)類對(duì)象來(lái)訪問(wèn)软族,也可以通過(guò)類名直接訪問(wèn)。
理解:
(1)通過(guò)類對(duì)象訪問(wèn)是正常訪問(wèn)残制。
? ? ? ?如下面代碼所示:(我直接寫(xiě)類和調(diào)用了)
#include<iostream>
using namespace std;
class Person{
public:
Person(){};
static int a;
}
int Person::a = 0;
int main()
{
Person p1;
p1.a = 100;
Person p2;
p2.a = 200;
cout << "a1 = " << p1.a<<endl;
cout <<"a2 = " << p2.a << endl;
}
? ? ? ?輸出結(jié)果是什么呢立砸?
? ? ? ?當(dāng)然是:
? ? ? ?? ? ? ? a1 = 200;
? ? ? ?? ? ? ? a2 = 200;
? ? ? ?因?yàn)?a 是類的靜態(tài)變量,是共享的初茶,所以更改的都是同一個(gè)值颗祝。
(2)通過(guò)類名直接訪問(wèn)
? ? ? ?如何通過(guò)類名直接訪問(wèn)呢?可以用下面代碼所示調(diào)用:
Person::a;
? ? ? ?因?yàn)閟tatic變量并不屬于任何一個(gè)類對(duì)象恼布,但是它屬于這個(gè)類螺戳,因此可以直接用類名調(diào)用。
4. 靜態(tài)成員變量必須在類中聲明折汞,在類外定義倔幼。
? ? ? ?靜態(tài)變量在類中聲明static,為什么在類外定義呢?類中能否定義爽待?答案是不行的损同。來(lái)看看代碼。
#include<iostream>
using namespace std;
class Person{
public:
Person(int pa)
{
a = pa;
};
static int a;
}
int main()
{
cout <<Person::a << endl; //錯(cuò)誤堕伪,無(wú)法訪問(wèn)到a
}
? ? ? ?代碼中揖庄,我們用 Person::a 的方式直接訪問(wèn)類的靜態(tài)變量,是不會(huì)調(diào)用構(gòu)造函數(shù)的欠雌,因此類中的 a 是沒(méi)有定義的蹄梢。所以最好是在類外定義類的靜態(tài)變量。
三. 類的靜態(tài)成員函數(shù)
(一). 定義
? ? ? ?在類定義中,用static聲明的成員函數(shù)為靜態(tài)成員函數(shù)禁炒。使用方式與靜態(tài)成員變量一樣而咆,都是通過(guò)類對(duì)象訪問(wèn)和類名直接訪問(wèn)。
(二)意義
? ? ? ?類的靜態(tài)成員函數(shù)的意義在于管理靜態(tài)成員變量幕袱,完成對(duì)靜態(tài)成員變量的封裝暴备。
(三). 重點(diǎn)記憶
1. 靜態(tài)成員函數(shù)只能訪問(wèn)靜態(tài)成員變量,不能訪問(wèn)普通成員變量们豌。
? ? ? ?理解:static成員函數(shù)是是共享的涯捻,存儲(chǔ)在一塊空間中,而普通的成員變量是屬于每個(gè)類對(duì)象的望迎,每個(gè)類對(duì)象存儲(chǔ)在獨(dú)立的空間中障癌,若在靜態(tài)成員函數(shù)中直接訪問(wèn)普通成員變量,那么它將無(wú)法區(qū)分普通的成員變量屬于哪個(gè)類對(duì)象辩尊。
2.普通成員函數(shù)可訪問(wèn)靜態(tài)成員變量涛浙、也可以訪問(wèn)普通成員變量。
? ? ? ?理解:靜態(tài)成員變量只有一份存儲(chǔ)空間摄欲,普通成員函數(shù)可以直接識(shí)別轿亮,不會(huì)混淆。
? ? ? ?以上就是類中的靜態(tài)成員變量以及靜態(tài)成員函數(shù)的理解胸墙,原創(chuàng)不易我注,多多鼓勵(lì)!3儆纭仓手!
? ? ? ? 關(guān)注公號(hào)【開(kāi)發(fā)小鴿】,獲取海量計(jì)算機(jī)視覺(jué)與深度學(xué)習(xí)資源玻淑,實(shí)戰(zhàn)項(xiàng)目源碼,最新論文下載呀伙,大廠面試經(jīng)驗(yàn)2孤摹!剿另!?