const!!
C++ の const には、2つの意味があります。
定数という意味での const と、
メソッドを呼んでもオブジェクトの状態が変異しませんよというconstです。
前者は、こんな感じの書き換え不可に使います。
const int a = 10; printf("%d\r\n" , a ) ; //読み込みはOK printf好き //書き込みは不可 const なので書き換えられない。 a = 20;
後者のメソッドを読んでもオブジェクトの状態が変異しませんよなconstはこんな風にメソッドの後ろにつけます。
class myClass { private: int a; public: // ↓これ void abc() const { //この中では、オブジェクトメンバ変数への代入が禁止になります. printf("%d\r\n" , this->a ) ; //読み込みはOK //書き込みは不可。 //書き込みするとオブジェクトの状態が変異してしまう this->a = 20; //constメソッドから非constメソッドの呼び出しは禁止です this->non_const_method(); //エラー //constメソッドだったら呼べます this->const_method(); //const同士なのでOK } void non_const_method() { } void const_method() const { } };
で、C++屋さんが なんで、javaとかC#に const がないの?っていったときは、
後者の const のことを言っていることが多いです。
結構昔に javaにも const が入るとか入らないとか話を聞いたことがあるんですが、結局どうなったんでしょうか。。。例で出した後者のメソッドを呼んでもオブジェクトの状態が変異しませんよなconstが java でも使えるなら諸手を上げて喜ぶんですが。。。
javaは詳しくないのでいまいちよく分かりません。。。