国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

關(guān)于C++靜態(tài)成員函數(shù)訪(fǎng)問(wèn)非靜態(tài)成員變量的問(wèn)題

2020-01-26 15:46:35
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

復(fù)制代碼 代碼如下:

class a
{
public:
  static FunctionA()
  {
     menber = 1;
  }

private:
  int menber;
}


編譯上述代碼,出錯(cuò)。原因很簡(jiǎn)單大家都知道,靜態(tài)成員函數(shù)不能訪(fǎng)問(wèn)非靜態(tài)成員,這是因?yàn)殪o態(tài)函數(shù)屬于類(lèi)而不是屬于整個(gè)對(duì)象,靜態(tài)函數(shù)中的 member可能都沒(méi)有分配內(nèi)存。靜態(tài)成員函數(shù)沒(méi)有隱含的this自變量。所以,它就無(wú)法訪(fǎng)問(wèn)自己類(lèi)的非靜態(tài)成員。

那要想訪(fǎng)問(wèn)怎么辦呢?地球人都知道只要將:

復(fù)制代碼 代碼如下:

int menber;
//change the line above to:
static int menber;

但是這個(gè)方法讓我們不得不將static function內(nèi)用到的成員變量都變成static的了,而且static的成員還要顯式初始化,有沒(méi)有更好的方法?答案是肯定的。代碼說(shuō)話(huà):
復(fù)制代碼 代碼如下:

class a
{
public:
  static FunctionA(a* _a)
  {
    _a-> menber = 1;
 cout<<_a-> menber<<endl;
 _a->f();
  }
void f()
{
 cout<<"f被調(diào)用了"<<endl;
}
private:
  int menber;
};

前提是這個(gè)類(lèi)要分配了內(nèi)存空間。其實(shí)這里我做的就是將一個(gè)對(duì)象指針作為靜態(tài)成員函數(shù)的“this”指針,意在模仿傳遞非靜態(tài)成員函數(shù)里this變量(在非靜態(tài)成員函數(shù)中都有this指針(push在ECX中似乎))

這個(gè)想法是我在一個(gè)class中要CreateThread的時(shí)候產(chǎn)生的,因?yàn)門(mén)hread 的funtion都是要求static的(是這樣的把?不知道為什么我寫(xiě)的code,Thread都是static的了。忘了哪兒看到的有這個(gè)要求了。有時(shí)間找找原因)。

可見(jiàn)C++是非常靈活的。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 同江市| 新邵县| 三台县| 达尔| 宁明县| 海伦市| 策勒县| 阳城县| 甘肃省| 阆中市| 通道| 泰兴市| 宝丰县| 驻马店市| 安远县| 河津市| 秦皇岛市| 永泰县| 杨浦区| 白河县| 河北区| 沙洋县| 晋城| 德州市| 南华县| 宣武区| 博兴县| 聂荣县| 江北区| 迭部县| 鄯善县| 乌恰县| 沙湾县| 会东县| 京山县| 敖汉旗| 万州区| 东方市| 米泉市| 新闻| 北票市|