[問題] 介於static和private的宣告?

作者: noodleT (麵T)   2015-12-28 23:29:36
class objA{
public:
void func(){
static bool firstcall=0;

}
}
寫程式時,
旗標宣告成 static 很方便,
但是當他是放在類別函式裡面就怪怪的!
當我宣告兩個以上的類別
objA a1,a2;
a1.func()
a2.func()
"static"會互相影響到
為了解決這問題只好把 firstcall
宣告成私有成員。
可是這樣對往後維護也不好…
請問有可以宣告在函式內,
卻又互相獨立的方法嗎
作者: longlongint (華哥爾)   2015-12-29 01:03:00
member variable
作者: Caesar08 (Caesar)   2015-12-29 10:42:00
這應該問你,你當初為甚麼要宣告成static吧
作者: CaptainH (Cannon)   2015-12-29 12:20:00
為什麼private對維護不好?
作者: Caesar08 (Caesar)   2015-12-29 22:55:00
為甚麼一定要宣告在函式內呢?
作者: noodleT (麵T)   2015-12-29 23:05:00
因為那個變數從頭至尾只在該func使用,如果宣告在class成員中,那麼:1、必須在建構子初始化。2、原本可以寫成 const function 的函式,也要改成 nonconst而且,寫一般函式時,我們也不會把旗標寫成全域變數吧
作者: LPH66 (-6.2598534e+18f)   2015-12-29 23:17:00
C++ 有個關鍵字叫 mutable 可以解決你的問題 2
作者: Caesar08 (Caesar)   2015-12-29 23:19:00
推樓上,直覺想到這個,但這應該不是他要的我看你的敘述,感覺不用static就可以達到這些但你用static,應該是第一次呼叫func的object才有這資料
作者: noodleT (麵T)   2015-12-29 23:21:00
我會查看看的,謝謝
作者: Caesar08 (Caesar)   2015-12-29 23:22:00
在data member加一個pointer呢?變數名不是叫firstcall嗎?應該會對第一次呼叫func的object給予某些資料吧
作者: noodleT (麵T)   2015-12-30 00:05:00
其他開發者,萬一在class中直接使用newvertex,而不是透過getnewvertex(),那他所計算的值就不保証是最新的座標位置了!但偏偏變數名稱有「new」也許是我自己太多慮,自找麻煩==

Links booklink

Contact Us: admin [ a t ] ucptt.com