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


靜態成員函數不能訪問非靜態成員,這是因為靜態函數屬於類而不是屬於整個對象,靜態函數中的 member可能都沒有分配內存。靜態成員函數沒有隱含的this自變量。所以,它就無法訪問自己類的非靜態成員
代碼如下:

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++是非常靈活的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM