c++會區分兩種型別的成員函式:靜態成員函式和非靜態成員函式。這兩者之間的乙個重大區別是,靜態成員函式不接受隱含的this自變數。所以,它就無法訪問自己類的非靜態成員。
在某些條件下,比如說在使用諸如pthread(它不支援類)此類的多執行緒庫時,就必須使用靜態的成員函式,因為其位址同c語言函式的位址相容。這種銅限制就迫使程式設計師要利用各種解決辦法才能夠從靜態成員函式訪問到非靜態資料成員。
第乙個解決辦法是宣告類的所有資料成員都是靜態的。運用這種方式的話,靜態的成員函式就能夠直接地訪問它們,例如:
class singleton ;
singleton * singleton::instance()
這種解決方法不適用於需要使用非靜態資料成員的類。
訪問非靜態資料成員
將參照傳遞給需要考量的物件能夠讓靜態的成員函式訪問到物件的非靜態資料:
class a ;
靜態成員函式func()會使用參照obj來訪問非靜態成員val。
voida::func(a & obj)
將乙個參照或者指標作為靜態成員函式的自變數傳遞,就是在模仿自動傳遞非靜態成員函式裡this自變數這一行為。
用靜態成員函式呼叫非靜態成員變數
今天寫程式要用到乙個計時器,然後需要建立乙個新的執行緒,這個執行緒是ctestdlg的乙個成員函式,必須定義為靜態的.但是這個時候就不能去訪問非靜態成員變數了,這裡找到乙個很好的解決辦法 先上 1.執行緒函式的定義 private intcount time ctime c time bool ge...
靜態成員函式 靜態成員變數
靜態的成員函式,同靜態資料成員類似,它也是屬於類,而不是屬於某乙個物件的。靜態成員函式不能訪問非靜態的資料成員,它只能訪問靜態資料成員,也只能呼叫其它的靜態成員函式。原因是 當前物件的位址 this 是被隱含地傳遞到被呼叫的函式的。但乙個靜態成員函式沒有 this 指標,所以它無法訪問非靜態的成員函...
PHP靜態成員變數和非靜態成員變數
php靜態成員變數和非靜態成員變數 突然在網上找到了一遍對php靜態變數和非靜態變數講解比較深入的一遍文章,特轉來分享下。資料成員可以分靜態變數 非靜態變數兩種.靜態成員 靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名 靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態...