**
目前為止我所知道的靜態包括靜態成員變數和靜態成員函式兩種。
二者都是在返回值型別前面新增static關鍵字,都可以通過類名直接訪問。
對於靜態成員變數,其分為全域性靜態變數和區域性靜態變數,二者都位於靜態儲存區。在類內定義靜態成員變數時,不可以在類內初始化,為什麼呢?
我的理解是,靜態成員變數屬於整個類,而不是某乙個物件,如果對其進行初始化,那麼每個物件都將初始化一次,這是矛盾的,且對於靜態成員變數來說,它只規定應該被初始化一次的,再者若是類內初始化,每個物件都初始化一次,而各個物件有共享乙個靜態變數,那麼將會出現所有物件的此成員的資料發生改變的錯誤,故而應該在類外初始化,《c++primer》裡面也說在類外定義和初始化是保證static成員變數只被定義一次的好方法。那麼在類外該如何初始化呢?方法為:返回值型別 類名::變數名=具體值;
靜態成員變數也存在許可權,遵循三個訪問原則。
靜態成員變數在編譯時就分配了記憶體。
類外可以通過類名加作用域直接訪問。
對於靜態成員函式,它可以訪問靜態成員變數和靜態成員函式,但不可以訪問非靜態變數和非靜態函式,而非靜態函式可以訪問非靜態變數非靜態函式和靜態變數靜態函式。它也可以通過類名加作用域的方式進行訪問。
為什麼不能訪問非靜態成員變數呢?我的理解是靜態成員函式是乙個共享的在整個程式執行期間只存在乙個的,而對於非靜態成員變數,它只能通過建立乙個物件才能被訪問,這就導致編譯器無法判斷到底是哪個物件要來訪問,因為它是被共享的,或者說某乙個物件訪問,並且改變了資料,那麼每一物件的該變數都會被改變,這是沒必要的也是會出現錯誤的,我的理解是這樣可能有些不對,僅供參考。
在靜態成員函式中可以定義靜態成員變數並且可以進行初始化,屬於函式體內的乙個區域性靜態變數。
關於c 建構函式的一些淺理解
建構函式是物件在被建立的時候,由編譯器自動呼叫並且分配記憶體空間的函式 不管你寫不寫它都會有 作用是初始化物件的成員。1 預設建構函式 語法 類名 每乙個類都自帶乙個預設建構函式,函式內為空,如果你寫了預設建構函式,則執行時編譯器將會呼叫你寫的預設建構函式。2 有參建構函式 語法 類名 引數1,引數...
關於C指標的一些理解
有時總被指標的用法及型別所困擾,那我簡單理解一下指標。指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。如下例子 1 int ptr 2 cha...
關於static(靜態)變數的一些理解
關鍵字static就是靜態的意思,被static修飾的變數就是靜態變數,對於靜態變數和普通變數有很多區別 include include using namespace std void fun int i 運算結果 3 對上述函式,當呼叫fun 1 時,value被初始化為1 i為2 下乙個語句v...