C 中靜態成員函式訪問非靜態成員變數

2021-06-18 21:16:26 字數 710 閱讀 4392

class a

private:

int menber;

}編譯上述**,出錯。原因很簡單大家都知道,靜態成員函式不能訪問非靜態成員,這是因為靜態函式屬於類而不是屬於整個物件,靜態函式中的 member可能都沒有分配記憶體。靜態成員函式沒有隱含的this自變數。所以,它就無法訪問自己類的非靜態成員。

那要想訪問怎麼辦呢?地球人都知道只要將:

int menber;

//change the line above to:

static int menber;

但是這個方法讓我們不得不將static function內用到的成員變數都變成static的了,而且static的成員還要顯式初始化,有沒有更好的方法?答案是肯定的。**說話:

class a

void f()

private:

int menber;

};前提是這個類要分配了記憶體空間。其實這裡我做的就是將乙個物件指標作為靜態成員函式的「this」指標,意在模仿傳遞非靜態成員函式裡this變數(在非靜態成員函式中都有this指標(push在ecx中似乎))

這個想法是我在乙個class中要createthread的時候產生的,因為thread 的funtion都是要求static的(是這樣的把?不知道為什麼我寫的code,thread都是static的了。忘了哪兒看到的有這個要求了。有時間找找原因)。

可見c++是非常靈活的。

C 靜態成員函式訪問非靜態成員

如果類沒有被建立,則沒有對應的成員,也就無法訪問 下面這種方法需要先建立類,並將類作為引數傳遞給靜態成員函式才能訪問。include using namespace std class person class student public person static void get age st...

C 中靜態成員函式訪問非靜態成員變數

private intmenber 編譯上述 出錯。原因很簡單大家都知道,靜態成員函式不能訪問非靜態成員,這是因為靜態函式屬於類而不是屬於整個物件,靜態函式中的 member可能都沒有分配記憶體。靜態成員函式沒有隱含的this自變數。所以,它就無法訪問自己類的非靜態成員。看過一篇很好的文章 c 中的...

靜態成員不能訪問非靜態成員

首先static的成員是在類載入的時候初始化的,jvm的classloader的載入,首次主動使用載入,而非static的成員是在建立物件的時候,即new 操作的時候才初始化的 先後順序是先載入,才能初始化,那麼載入的時候初始化static的成員,此時非static的成員還沒有被載入必然不能使用,而...