關於C++靜態成員函數拜訪非靜態成員變量的成績。本站提示廣大學習愛好者:(關於C++靜態成員函數拜訪非靜態成員變量的成績)文章只能為提供參考,不一定能成為您想要的結果。以下是關於C++靜態成員函數拜訪非靜態成員變量的成績正文
class a
{
public:
static FunctionA()
{
menber = 1;
}
private:
int menber;
}
編譯上述代碼,失足。緣由很簡略年夜家都曉得,靜態成員函數不克不及拜訪非靜態成員,這是由於靜態函數屬於類而不是屬於全部對象,靜態函數中的 member能夠都沒有分派內存。靜態成員函數沒有隱含的this自變量。所以,它就沒法拜訪本身類的非靜態成員。
那要想拜訪怎樣辦呢?地球人都曉得只需將:
int menber;
//change the line above to:
static int menber;
然則這個辦法讓我們不能不將static function內用到的成員變量都釀成static的了,並且static的成員還要顯式初始化,有無更好的辦法?謎底是確定的。代碼措辭:
class a
{
public:
static FunctionA(a* _a)
{
_a-> menber = 1;
cout<<_a-> menber<<endl;
_a->f();
}
void f()
{
cout<<"f被挪用了"<<endl;
}
private:
int menber;
};
條件是這個類要分派了內存空間。其實這裡我做的就是將一個對象指針作為靜態成員函數的“this”指針,意在模擬傳遞非靜態成員函數裡this變量(在非靜態成員函數中都有this指針(push在ECX中仿佛))
這個設法主意是我在一個class中要CreateThread的時刻發生的,由於Thread 的funtion都是請求static的(是如許的把?不曉得為何我寫的code,Thread都是static的了。忘了哪兒看到的有這個請求了。有時光找找緣由)。
可見C++長短常靈巧的。