類靜態成員

2021-08-27 01:48:00 字數 959 閱讀 2744

對於某些類,我們可能需要定義1個全域性物件。比如,我們想定義乙個整形資料,來記錄乙個類的某個函式呼叫的次數,或者統計一共建立了多少個這個類的物件。之前只能通過全域性物件來實現,但是這樣做有乙個明顯的缺點:全域性物件會破壞類的封裝特性,任何**都可以修改這個全域性物件,這是很不安全的。

因此,c++中引入了類靜態成員,這個成員用static修飾。有一點念需要明確:static物件並不是某個類的成員,而是這個類共有的。如果我們把它設為私有成員,那麼類外的函式就不能對它訪問,從而實現了封裝。

先看乙個簡單的程式:

class test

static void display()

{ cout《程式中test類宣告了乙個static成員cnt,可以用來記錄test物件的的個數。第一次列印結果為1,第二次為2.由於我把它設為公有有成員,所以在類外也可以修改它,讓它「看起來」跟類的普通成員差不多,但是修改以後,第3次次列印的結果就變成11了,這說明上一次對類static成員的修改對於這一次使用類依然有影響。當然,我們也可以使用作用域操作符::來修改它。

對於資料,我們可以定義它為static,對於函式也可以。此時這個函式也是屬於類的,而不屬於某個具體的物件。所以,static成員函式沒有this指標。當然,static完全可以在類內宣告,而在類外定義,此時,宣告時加上static,而定義時就不用加上static了。

還有一點需要注意,static資料成員必須在類外部定義,而且只能定義一次,也不能通過建構函式初始化它!所以最好把它放在對應標頭檔案的cpp檔案中,即把它與成員的非內聯函式的定義放在一起!它的定義的方法跟其他的類成員相同:先定義型別,再指定是哪個類中的,最後才是定義的語句,需要注意的是定義時不能加static。

上面的定義方法有一種特例,就是整型的const static成員,它是在類的定義體中初始化:static const int one = 1;但是這裡的初始化本質上還是宣告,而它的定義依然在類外進行,只不過不用指定初值而已:const int test::one;

類靜態成員和類靜態成員函式

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

靜態類成員

這個是容易讓人混淆和遺忘的地方,越是基礎的東西,越容易考和出錯。類的函式和資料成員都可以是靜態的。1 靜態資料成員 c 的靜態成員變數能夠在建構函式裡初始化麼?不能。因為靜態成員屬於類作用域,而不屬於類物件。程式一執行就初始化了,不可能在構造物件的時候再初始化一次。用複製語句最好。靜態成員其實和全域...

靜態類成員

靜態變數也稱類變數,是在類的所有例項間共享 直接使用類名來引用 靜態方法通過類名觸發!c code class person public string public string profession 建構函式初始化!public person public void eating 正在吃飯!n ...