-
舉個例子,例如,如果你想實現oo,你不能使用全域性函式,你還需要乙個條目處理程式(例如執行緒),你需要在構造乙個物件之前使用? 該怎麼辦???
使用靜態成員函式,因為它不屬於任何物件,只屬於類,並且可以在物件初始化之前使用。
它通常用於回撥函式。
如果你不明白,嗨,我。
-
並且不屬於任何物件
這裡詳細講解一下部分內容,其中一小部分和樓上有點一樣,但是我說的重點,和它不一樣,有些說法是修改的。
首先,我將把 landlord 的 “static members” 和 “static methods” 放在這裡,分別對應下面的 “static data members” 和 “static member functions”。 並使它們都是靜態成員。 (它們實際上是同一概念的不同術語。 )
靜態成員屬於乙個類,並由該類的所有物件共享“——沒錯。
不管你構建了多少個類的物件,記憶體中只有乙個靜態成員“——我想說的是,無論你在該類中構建了多少個物件,所有成員函式在記憶體中都只有乙個。
為什麼靜態成員屬於類?
因為,讓我們假設類 a };並將物件定義為 abc;
引用類成員的一般方法是通過物件引用它:;
但是,您可以通過類 a::i 引用 i,通過 a::d isplay() 引用 display()。這裡有乙個特別的提示!!
普通成員並非如此,儘管靜態成員和普通成員的記憶體中只有乙個副本。 但從這個角度來看,靜態成員屬於類。
對於靜態成員函式,我們可能無法分辨出區別,但對於靜態資料成員,我們可以很容易地理解它。
如果未將其定義為靜態資料成員,則每個物件都具有 i 的副本 (copy)。 但是,當定義為靜態資料成員時,所有物件共享 i 的副本,這意味著 i 是記憶體中的副本。
那麼,如果你在不同的物件中引用 i,如果你改變 i,其他物件中 i 的值也會改變,所有物件的值都是一樣的。
引用靜態資料成員時,可以遍歷乙個類而不是乙個物件,並且記憶體中只有乙個靜態資料成員,並且可以由乙個類引用。 很明顯,靜態資料成員屬於類。
這是一種在不同物件之間共享資料的方法。
靜態成員函式,類似於靜態資料成員。 毋庸置疑,需要注意的是,它在記憶體中始終只有乙個副本(普通成員函式也是如此)。
這裡就不多說靜態成員的生命週期了。
-
答:bb。此指標是指向系統隱含的當前物件的指標。
由於靜態函式是同一類別中所有物件共享的函式,並且記憶體裂解天平中只存在乙個副本,並且不屬於某個任意物件,因此靜態函式沒有這個指標。
-
在C++程式設計思路中提到,在引入靜態成員函式之前,如果需要調整類中C++中乙個函式,但與該類的例項無關,則需要((t*)null)->func(),所以簡單引入靜態記憶體函式。
我們定義了乙個包含私有靜態成員變數 m ninta 的 CstaticMember 類,如果想在外部訪問或更改 m ninta 的值,那麼我們必須根據 C++ 語法的要求提供乙個成員函式來訪問它。
賦值運算子和賦值表示式。
C++ 提供了幾個賦值運算子,其中最簡單的是“=”,帶有賦值運算子的表示式稱為賦值表示式。 例如,m=m+6 是乙個賦值表示式。
賦值表示式的用途是將等號右側的表示式的值賦給等號左側的物件。 賦值表示式的型別是等號左側物件的型別,表示式的結果是賦值後等號組左側物件的值,操作的組合是從右到左。
-
原因如下;
與靜態資料成員一樣,靜態成員函式是類的一部分,而不是物件的一部分。 如果要在類外部呼叫公共靜態成員函式,請使用類名和域運算子”。
例如,box volume( ) 實際上也允許通過物件名稱呼叫靜態成員函式,例如 );但這並不意味著這個函式屬於物件 a,而只是它型別為 a。 靜態成員函式的目的是能夠處理靜態資料成員。 可以說,靜態成員函式和非靜態成員函式的根本區別在於:
非靜態成員函式有這個指標,靜態成員函式不屬於乙個物件,它與任何物件都沒有關係,靜態成員函式沒有這個指標。
這確定靜態成員函式無法訪問此類中的非靜態成員。 在 C++ 程式中,靜態成員函式主要用於訪問靜態資料成員,而不是非靜態成員。 假設靜態成員函式中有以下語句:
cout<”。比如cout<<
-
靜態成員函式的定義與常規成員函式的定義相同,只是前面有乙個 static 關鍵字,其定義格式如下。
類名。
static
型別。 函式(引數)的名稱。
函式體說明: 1)類的靜態成員函式只能訪問類的靜態差分總資料成員,而不能訪問類中的普通函式成員。
因為只有當類的物件存在時,普通資料成員才有意義。
2)靜態成員函式與類相關聯,而不是與類的物件相關聯,因此類中的公共靜態成員是在類外部呼叫的。
函式,必須保留“類名:”,而不是通過物件名稱呼叫公共靜態成員函式。 課外。
部門不能呼叫類中的私有靜態成員函式。
-
靜態成員函式不與任何物件關聯,因此它不能對非靜態成員進行預設訪問。
它們之間的根本區別在於,靜態成員函式沒有指向 this 的指標,而非靜態成員函式具有指向當前物件 this 的指標。
例如:class sc
void f(sc &s)
函式 nsfn() 可以被認為是被宣告為 void sc::nsfn(sc* this, int a)。 對 nsfn() 的呼叫像注釋一樣編譯,將 s 的位址作為傳遞的第乙個引數。
你實際上並不編寫呼叫,它是通過編譯完成的。 )
在函式內部,sc::nsfn() 對非靜態成員的訪問將自動將此引數作為指向當前物件的指標。 當 sc::
呼叫 sfn() 時,不會傳遞任何物件的位址。 因此,在訪問非靜態成員時,此指標沒有錯誤。 這就是為什麼靜態成員函式與任何當前物件無關的原因。
人民幣貶值對經濟、生活和工作都有影響
1、進口減少,進口企業利潤下降:因為在進口貨物時,必須先用人民幣在銀行兌換美元等外幣,然後再從國外購買貨物。 >>>More