作者walm20 (New CygnusX)
看板C_and_CPP
標題[問題] member function中的static variable
時間Wed Dec 30 01:18:35 2009
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
一個member function中
code為:
宣告static int count=0
並且cout<<++count
main中有三個此類別的物件
個別呼叫一次此member function
其結果為:
1
2
3
與朋友討論之理由為
member function是class member共用的
希望得到的正確結果:
程式跑出來的錯誤結果:
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
有問題的code: (請善用置底文標色功能)
class Base {
public:
void foo() {
static int count=0;
cout<<++count<<endl;
}
};
Base tmp[3];
for(int i=0;i<3;i++)
tmp[i].foo();
補充說明:
想確定 是不是因為member function是整個class共用的
如果不是 那是什麼原因?
(是的話,還是覺得怪怪的XD)
--
╠═╬═卒═帥═馬═╬═╬═╬═╣
║ ║ ║ ║╲║╱║ ║ ║ ║ 此時,
╠═╬═╬═車═╬═╬═╬═╬═╣ 帥有何用?
║ ║ ║ ║╱║╲║ ║ ║ ║ 有車又如何?
╚═╩═╩═╩═╩═╩═╩═╩═╝ 有馬子又怎樣? ψKnicks
→ : 你錯了,當你有車跟帥的時候,馬是可以變成炮 卒就沒用
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.24.21
※ 編輯: walm20 來自: 118.169.24.21 (12/30 01:23)
→ fragileness:是共用的沒錯吧 只是偷偷帶入的第一個參數(this指標) 12/30 01:43
→ fragileness:不同 12/30 01:43
推 VictorTom:話說, class的static data member本來就是所有instance 12/30 09:08
→ VictorTom:共用的不是嗎?_? 12/30 09:08
→ VictorTom:啊對不起, 小弟我看懂問題了, 請無視上面的推文....Orz 12/30 09:09
推 holymars:真的要說原因..static variable本來就是共用同一個位置的 12/30 13:05
→ fragileness:我想原po應該知道function中static variable的特性 12/30 23:47
→ fragileness:只是原本可能以為tmp[0].foo() 和tmp[1].foo()是兩個 12/30 23:48
→ fragileness:不同的function 12/30 23:48
→ fragileness:其實應該看成對Base::foo(*Base)的兩次呼叫 12/30 23:50
→ fragileness:只是一次傳入的pointer指向tmp[0] 另一次指向tmp[1] 12/30 23:50
→ walm20:樓上瞭解我! 12/31 01:16