[問題] member function中的static variable

看板C_and_CPP (C/C++)作者 (New CygnusX)時間16年前 (2009/12/30 01:18), 編輯推噓2(2010)
留言12則, 4人參與, 最新討論串1/1
( *[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)

12/30 01:43, , 1F
是共用的沒錯吧 只是偷偷帶入的第一個參數(this指標)
12/30 01:43, 1F

12/30 01:43, , 2F
不同
12/30 01:43, 2F

12/30 09:08, , 3F
話說, class的static data member本來就是所有instance
12/30 09:08, 3F

12/30 09:08, , 4F
共用的不是嗎?_?
12/30 09:08, 4F

12/30 09:09, , 5F
啊對不起, 小弟我看懂問題了, 請無視上面的推文....Orz
12/30 09:09, 5F

12/30 13:05, , 6F
真的要說原因..static variable本來就是共用同一個位置的
12/30 13:05, 6F

12/30 23:47, , 7F
我想原po應該知道function中static variable的特性
12/30 23:47, 7F

12/30 23:48, , 8F
只是原本可能以為tmp[0].foo() 和tmp[1].foo()是兩個
12/30 23:48, 8F

12/30 23:48, , 9F
不同的function
12/30 23:48, 9F

12/30 23:50, , 10F
其實應該看成對Base::foo(*Base)的兩次呼叫
12/30 23:50, 10F

12/30 23:50, , 11F
只是一次傳入的pointer指向tmp[0] 另一次指向tmp[1]
12/30 23:50, 11F

12/31 01:16, , 12F
樓上瞭解我!
12/31 01:16, 12F
文章代碼(AID): #1BEZdlIP (C_and_CPP)
文章代碼(AID): #1BEZdlIP (C_and_CPP)