成員指類中的兩個分類:
資料成員:常量、字段(靜態字段
,例項字段
)(注意
:類成員變數叫做字段
,欄位是變數的一種
,隸屬於類。
)函式成員:屬性、方法、巢狀類、索引器、事件、運算子、例項建構函式、析構函式、靜態建構函式
許可權修飾符:
public:可修飾類和型別成員
任何地方都可以訪問到public類
internal:可修飾類和型別成員
只能在同一程式集內訪問到internal類
private:可修飾型別成員
不可被子類繼承
protect:可修飾型別成員
可被子類繼承
它們的訪問許可權如下:
**於部落格:
static:靜態。可修飾類、字段、屬性和方法
標記為static的字段、屬性和方法可以不用建立例項,直接類名
.xx使用,下面詳細說明下
static
先解釋下靜態成員和非靜態成員的區別
靜態成員屬於類所有,非靜態成員屬於類的例項所有
每建立乙個類的例項,都會在記憶體中為非靜態成員新分配一塊記憶體;而靜態成員屬於類所有,為各個類公用,所以無論類建立了多少例項,類的靜態成員在記憶體中都只佔同一塊記憶體。
static有三種用法,分別是用於變數前、方法前和類前:
變數前:
因為在記憶體中一直占用的同一塊記憶體,所以每次使用該變數所在的方法、類和自定義類時,變數值為最後一次被賦值的值(可以理解為每次呼叫後值都會疊加),稱為靜態變數。
方法前:
該方法為所在類或自定義持有,而不是這個類所有,也稱為靜態方法。靜態方法只能訪問類中的靜態成員,但可以建立其他類的例項(除了靜態類,因為靜態類無法建立例項)。
深入了解的原因就是,因為靜態方法在類例項化前就可以使用了,而類中非靜態變數必須在例項化之後才能分配記憶體,這樣靜態方法在呼叫時無法判斷非靜態變數使用的記憶體位址,所以無法使用。
實際上靜態變數和靜態方法效率上要比例項高,因為靜態方法和靜態變數建立後始終使用同一塊記憶體,而使用例項的方式會建立多個記憶體。但這樣帶來的缺點就是不能自動進行銷毀,而例項化的則可以做銷毀。
ps:所以在靜態方法中要呼叫非靜態的方法,需要建立非靜態方法所在的類的例項,然後呼叫類中的那個非靜態方法。
類前:
靜態類無法建立例項。類下的方法全是靜態方法,類下的非靜態方法都是無法使用的。所以如果自定義的靜態類中想建立public方法時不允許的
(vs code
中會提示錯誤,加上
static即可)
以上參考自大佬部落格:
,寫的非常好,看完茅塞頓開
C 關鍵字this和靜態成員
一 關鍵字this 1 include using namespace std class cdummy int cdummy isitme cdummy param int main 2 執行 root localhost test test yes,a is b3 說明 關鍵字this通常被用在...
c中的關鍵字
一 register 作用 請求編譯器盡可能的將變數存在cpu內部暫存器中,一般的變數存在記憶體中,當需要時cpu再從記憶體中把它抓取到cpu中,使用register把它存在cpu中省去了cpu從記憶體中抓取資料的時間,提高執行效率。注意 1 盡可能,因為cpu記憶體有限,不可能全放在裡面,一般把頻...
C 中struct關鍵字和class關鍵字的區別
剛開始接觸 c 看到 中有struct關鍵字,還以為是用了結構體,結果後來發現 struct 和 class 一樣都用於類的定義,於是把兩者的差別記錄於此。一句話總結 兩者均可用於定義類,唯一的區別是兩者定義的類的預設訪問許可權有差別。其實比兩者差別更重要的是,我很好奇為什麼 c 中會存在兩個用於定...