ネタがない
最近は早く寝て早く起きる(大体朝4時ぐらいに起きる)のが良い感じです。
睡眠時間も多いし、健康的です。後はランニングとか運動しましょうね。
多宗教だけどゲッタをconstメソッドにするぐらいは守ってほしい
この間多宗教だからうんぬんかんぬん言ってたような気がしますが、それでも全ての人に守ってもらいたいルールってのはありますよね。
例えば、constメソッドはその最もたる例で。
// 二次元座標を示すクラス class dimension { public: dimension( float x, float y ) : X_(x), Y_(y) {} float get_x() { // constメソッドでない! return X_; } float get_y() { // これもですか! return Y_; } void set_x( float x ) { X_ = x; } void set_y( float y ) { Y_ = y; } private: float X_; float Y_; }; // 座標を受取ってほにゃららする関数 void f( dimension const& pos ) { pos.get_x(); // constメソッドじゃないからアクセスできない! // 解決するにはconstを外さなければ・・・!orz }
引数fがこのクラスからget_x, get_yを呼び出すためには引数をconst参照でなく参照にするしかありません。
「ちょっとまって!自分でconstメソッドにすれば良いんじゃないの?」
という風に言われる方もいると思いますが、もし、このdimensionクラスが他の人が作ったものである場合、下手に変更するとコンパイルが通らない可能性があるかも知れません。
つまり、私たちは泣く泣く関数fの引数をただの参照にしなければいけない訳です。ただ座標を貰いたいだけなのに!*1
これだけを考えてもconst参照が如何に必要なものか分かったかも知れませんが、もうちょっと考えてみると、このような座標を示すクラスの場合、他のクラスが包含する可能性が高いです。例えばゲームなどで言えばキャラクターの位置を示すものとして。
// ゲーム内のキャラクターを示すクラス class character { character() : Pos_(320,240) {} void move() { ...; } dimension const& get_pos() const { // const参照としてオブジェクトはgetできるけど。。。 return Pos_; } private: dimension Pos_; }; // キャラクタを受取る void g( character const& c ) { dimension const& d = c.get_pos(); d.get_x(); // データを受取れない! }
こういうことになって、関数gの引数をconst参照から参照にしなければいけない訳です。このように、1つのクラスのゲッタがconstメソッドでない事がダイレクトに包含するクラスや他の関数へ波及してしまうのです。
読み取り専用でオブジェクトを受取る場合はconst参照にするのはうちの部でもちゃんと聞くんですが、constメソッドはその大前提であると言っても過言ではないと思います。これができてなかったらconst参照で受け取れないんです。constメソッド、これ大事です。ということが言いたかっただけ。
*1:ただ座標が欲しい場合このようなクラスは必要でないかも知れませんが、他の場合では、例えばこのクラスを後で3次元版に修正するかも、ということも考えると、欲しくなるかも知れません。