關於C 靜態成員函式訪問非靜態成員變數的問題

2022-09-28 01:36:09 字數 823 閱讀 2501

複製** **如下:

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++靜態成員函式訪問非靜態成員變數的問題

本文位址:

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

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

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

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

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

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