建立靜態成員和友元的目的:
建立靜態成員主要是解決資料共享問題,而建立友元的目的是為了讓某些函式訪問類中的私有成員。
1…靜態資料成員
思考:為什麼要定義靜態資料成員?
答:如果不定義為靜態資料成員,那麼每個物件都分別有乙個i的副本(拷貝)。但定義為靜態資料成員之後,所有的物件共享有乙個i的副本,就是說i在記憶體裡就乙個副本。
那麼,不同物件引用i,對i改變的話, 其他物件中i的值也會被改變,而且所有物件的值都是相同的。
在引用靜態資料成員時,可以不通過物件而通過類,靜態資料成員在記憶體只有乙個,而且可以通過類來引用。這是靜態資料成員屬於類,很明顯的。
這是實現不同物件間資料共享的一種方法。
(1)靜態資料成員在定義或說明時前面加關鍵字 static 。
例: …….
private:
int a,b,c;
static int s
;
(2) 靜態資料成員一般在類定義外部按特定的格式進行初始化。(靜態資料成員是在程式開始執行時被分配空間的,到程式結束時才釋放空間,所以可以在建立物件前就可以為靜態資料成員賦值)
其格式為:
< 資料型別 >< 類名 >::< 靜態資料成員名 >=< 值 >;
例:
class nclass
;int nclass::a=5;
引用靜態資料成員時,採用如下格式:
< 類名 >::< 靜態成員名 >
(3)例項
class sample
void add()
void disp() };
int sample::sum = 0; // 靜態資料成員賦初值
void main()
執行結果:
n=2,sum=2
n=3,sum=5
n=5,sum=10
可以看出
靜態資料成員有以下特點:
1.對於非靜態資料成員,每個類物件都有自己的拷貝。而靜態資料成員被當作是類的成員。無論這個類的物件被定義了多少個,靜態資料成員在程式中也只有乙份拷 貝,由該型別的所有物件共享訪問。(也就是說,靜態資料成員是該類的所有物件所共有的。)對該類的多個物件來說,靜態資料成員只分配一次記憶體,供所有物件共 用。所以,靜態資料成員的值對每個物件都是一樣的,它的值可以更新;
2.靜態資料成員儲存在全域性資料區。靜態資料成員定義時要分配空間,所以不能在類宣告中定義。在該例子中,語句int sample ::sum=0;是定義靜態資料成員;
3. 靜態資料成員和普通資料成員一樣遵從public,protected,private訪問規則;
4.因為靜態資料成員在全域性資料區分配記憶體,屬於本類的所有物件共享,所以,它不屬於特定的類物件,在沒有產生類物件時其作用域就可見,即在沒有產生類的例項時,我們就可以操作它;
2…靜態成員函式:
(1)思考:為什麼要定義靜態成員函式?
答:一般這些函式都是用來對這個類進行操作的。例如,你要修改乙個靜態成員資料,那麼需要靜態成員函式。
(2) 呼叫格式為: classname::static func()
(3)重點:靜態成員函式不屬於任何物件,它屬於類,所以靜態成員函式中沒有this指標,所以在靜態成員函式中,無法訪問本類的非靜態資料成員。
靜態成員函式既可以在類中定義,也可以在類外定義;靜態成員函式在類外定義時,不需要用static字首;
3…類的友元:
把friend double distance()放入point類中,為友元函式。
class a
;class b
;
b類是a類的友元類,則b類的所有成員函式都是a類的友元函式,b中的任何元素都可以訪問a類的私有和保護成員(注意是單向的)。
class point
~point()
static int getcount(/*point* pthis*/)
//沒有this指標,
//在靜態成員函式中,
//無法對本類的非靜態成員進行預設訪問
//int getx()
//int gety()
void setx(int x)//有this指標
friend double distance(const point& p1, const point& p2);
};int point::_count = 0;
double distance(const point& p1, const point& p2)
int main4()
靜態成員,內聯,友元,const成員函式
一.靜態成員 靜態成員分為靜態成員函式和靜態資料成員,是為了實現我們有時候希望有某乙個或者幾個資料成員為類所定義出來的物件所共有,從而實現乙個類多個物件之間的資料共享,如統計總數,平均值等。靜態資料成員 若類中的乙個資料成員被宣告為static,則這個成員為靜態資料成員,這個成員為這個類的所有物件所...
靜態成員與友元函式
1 靜態成員 由來 使用全域性物件實現資料共享,由於其處處可見,不夠安全,故可使用靜態成員實現類的多個物件之間的資料共享。包括 靜態資料成員 靜態成員函式 特點 靜態資料成員屬於類,而不屬於某個物件獨有,類的所有物件共享靜態資料成員 靜態資料成員使用關鍵字static,在類體中宣告,在類體外定義,以...
靜態成員與友元
靜態成員與友元 1 實驗目的 學習友元函式的定義和原理。學習靜態資料成員和靜態成員函式的使用。學習靜態成員代替全域性變數實現物件間的共享。2 實驗內容 1 有如下類的定義。類成員函式copy用於實現兩個物件的相互拷貝,請完成該函式的實現。有兩種方法即用成員函式和友元函式實現 include incl...