看板 C_and_CPP 關於我們 聯絡資訊
( *[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