靜態資料成員和靜態成員函式

2021-10-05 19:50:02 字數 1343 閱讀 7968

靜態資料成員屬於類( 準確地說,是屬於類中乙個物件集合 ) , 而不像普通資料成員那樣屬於某一物件,因此可以使用「類名∷」訪問靜態的資料成員。例如上面例子中的 student∷count。

靜態資料成員不能在類中進行初始化, 因為在類中不給它分配記憶體空間, 必須在 類外的其它地方為它提供定義。一般在 main()開始之前, 類的宣告之後的特殊地帶為它 提供定義和初始化。預設時,靜態成員被初始化為零。

靜態資料成員與靜態變數一樣, 是在編譯時建立並初始化。它在該類的任何物件被建立之前就存在,它可以在程式內部不依賴於任何物件被訪問。

c + + 支援靜態資料成員的乙個主要原因是可以不必使用全域性變數。依賴於全域性變數的類幾乎都是違反物件導向程式設計的封裝原理的。靜態資料成員的主要用途是 定義類的各個物件所公用的資料,如統計總數、平均數等。

在類定義中,前面有 static 說明的成員函式稱為靜態成員函式。靜態成員函式屬於整個類,是該類所有物件共享的成員函式, 而不屬於類中的某個物件。

靜態成員函式首先是乙個成員函式,因此它不能像類以外的其它函式那樣使用, 在使用時要用「類名∷」作為它的限定詞,或指出它作用在哪個物件上。其次靜態成員函式是一種特殊的成員函式,它不屬於某乙個特定的物件, 要讓乙個靜態成員函式去訪問乙個類中的非靜態成員,既麻煩又沒有實際意義。一般而言, 靜態成員函式訪問的基本上是靜態資料成員或全域性變數。

靜態成員函式可以定義成內嵌的, 也可以在類外定義, 在類外定義時, 不要用 static 字首。

編譯系統將靜態成員函式限定為內部連線, 也就是說,與現行檔案相連線的其它檔案中的同名函式不會與該函式發生衝突,維護了該函式使用的安全性, 這是使用靜態成 員函式的乙個原因。

使用靜態成員函式的另乙個原因是, 可以用它在建立任何物件之前處理靜態數 據成員,這是普通成員函式不能實現的功能。

在一般的成員函式中都隱含有乙個 this 指標, 用來指向物件自身,而在靜態成員 函式中是沒有 this指標的,因為它不與特定的物件相聯絡, 呼叫時使用如下格式較好

類名∷靜態成員函式名()

small - cat∷total -

disp()

;

當然把它看作是某個物件的成員也是允許的,如使用以下語句也是正確的:

w1 .total -

disp()

;

一般而言, 靜態成員函式不訪問類中的非靜態成員。若確實需要,靜態成員函式只能通過物件名(或指向物件的指標) 訪問該物件的非靜態成員。如把 display( ) 函式定義為靜態成員函式時,應將物件作為引數, 可將它定義為:

static

void display (small-cat & w)

靜態成員和靜態成員函式

靜態成員和靜態成員函式 普通成員變數每個物件有各自的乙份,而靜態成員變數一共就乙份,為所有物件共享。靜態成員物件不需要通過物件就能訪問 class crectangle crectangle crectangle int i,int j crectangle crectangle int crect...

靜態成員和靜態成員函式

靜態成員函式的特點 1.static資料成員在類內的內部宣告,但只能在類的外部定義,在類的外部不能指定static,在類的定義時候驚醒初始化 2.static資料成員只能在課的外部進行初始化 特例 當整形const static資料成員被常量表示式初始化,就可以在類內進行初始化,但還需要在外部進行定...

C 靜態成員函式和靜態資料成員

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