C 類靜態成員與類靜態成員函式詳解

2021-08-01 02:00:55 字數 2147 閱讀 2727

static關鍵字至少有下列n個作用:

(1)函式體內static變數的作用範圍為該函式體,不同於auto變數,該變數的記憶體只被分配一次,因此其值在下次呼叫時仍維持上次的值;

(2)在模組內的static全域性變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問;

(3)在模組內的static函式只可被這一模組內的其它函式呼叫,這個函式的使用範圍被限制在宣告它的模組內;

(4)在類中的static成員變數屬於整個類所擁有,對類的所有物件只有乙份拷貝;

(5)在類中的static成員函式屬於整個類所擁有,這個函式不接收this指標,因而只能訪問類的static成員變數。 

const關鍵字至少有下列n個作用:

(1)欲阻止乙個變數被改變,可以使用const關鍵字。在定義該const變數時,通常需要對它進行初始化,因為以後就沒有機會再去改變它了;

(2)對指標來說,可以指定指標本身為const,也可以指定指標所指的資料為const,或二者同時指定為const;

(3)在乙個函式宣告中,const可以修飾形參,表明它是乙個輸入引數,在函式內部不能改變其值;

(4)對於類的成員函式,若指定其為const型別,則表明其是乙個常函式,不能修改類的

成員變數;

(5)對於類的成員函式,有時候必須指定其返回值為const型別,以使得其返回值不為「左值」。例如:

const classa operator*(const classa& a1,const classa& a2);

operator*的返回結果必須是乙個const物件。如果不是,這樣的****也不會編譯出錯:

classa a, b, c;

(a * b) = c; // 對a*b的結果賦值

操作(a * b) = c顯然不符合程式設計者的初衷,也沒有任何意義。

靜態成員不可在類體內進行賦值,因為它是被所有該類的物件所共享的。你在乙個物件裡給它賦值,其他物件裡的該成員也會發生變化。為了避免混亂,所以不可在類體內進行賦值

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。

靜態資料成員的用途之一是統計有多少個物件實際存在。

靜態資料成員不能在類中初始化,實際上類定義只是在描述物件的藍圖,在其中指定初值是不允許的。也不能在類的建構函式中初始化該成員,因為靜態資料成員為類的各個物件共享,否則每次建立乙個類的物件則靜態資料成員都要被重新初始化。

靜態成員不可在類體內進行賦值,因為它是被所有該類的物件所共享的。你在乙個物件裡給它賦值,其他物件裡的該成員也會發生變化。為了避免混亂,所以不可在類體內進行賦值。

靜態成員的值對所有的物件是一樣的。靜態成員可以被初始化,但只能在類體外進行初始化。

一般形式:

資料型別類名::靜態資料成員名=初值

注意:不能用引數初始化表對靜態成員初始化。一般系統預設初始為0。

靜態成員函式不能呼叫非靜態資料成員,要通過類的物件來呼叫。

1、static成員的所有者是類本身和物件,但是多有物件擁有一樣的靜態成員。從而在定義物件是不能通過建構函式對其進行初始化。

2、靜態成員不能在類定義裡邊初始化,只能在class body外初始化。

3、靜態成員仍然遵循public,private,protected訪問準則。

4、靜態成員函式沒有this指標,它不能返回非靜態成員,因為除了物件會呼叫它外,類本身也可以呼叫。

關於靜態成員函式,可以總結為以下幾點:

出現在類體外的函式定義不能指定關鍵字static;

靜態成員之間可以相互訪問,包括靜態成員函式訪問靜態資料成員和訪問靜態成員函式;

非靜態成員函式可以任意地訪問靜態成員函式和靜態資料成員;

靜態成員函式不能訪問非靜態成員函式和非靜態資料成員;

由於沒有this指標的額外開銷,因此靜態成員函式與類的全域性函式相比速度上會有少許的增長;

呼叫靜態成員函式,可以用成員訪問操作符(.)和(->)為乙個類的物件或指向類物件的指標呼叫靜態成員函式,當同一類的所有物件使用乙個量時,對於這個共用的量,可以用靜態資料成員變數,這個變數對於同一類的所有的物件都取相同的值。靜態成員變數只能被靜態成員函式呼叫。靜態成員函式也是由同一類中的所有物件共用。只能呼叫靜態成員變數和靜態成員函式。

C 類靜態成員與類靜態成員函式

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...

C 類靜態成員與類靜態成員函式

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...

C 類靜態成員與類靜態成員函式

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...