程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 關於C++靜態成員函數拜訪非靜態成員變量的成績

關於C++靜態成員函數拜訪非靜態成員變量的成績

編輯:關於C++

關於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++長短常靈巧的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved