2013年9月21日土曜日

C++ this !?

this なにがコレなんでしょう? というthisの話です。^^

this とはそれを記述したオブジェクトそのものを指し示すポインタです。
オブジェクト内のメンバ変数や関数は、変数名や関数名だけで利用できました。
実は正確に記述するならば、 this-> がつきます。
省略可能なため、普通は書かないことが多いです。あまり見たこともないです。(^_^;)

thisを使うと何がいいのでしょうか?
それは、メンバ関数の引数やローカル変数にメンバ変数と同じ名前を付けることが
できるということです。もちろんどちらの変数を使うといった区別は必要ですが。

具体的にthisを使った例を見て行きます。
引数の値をメンバ変数に代入するコンストラクタです。

#define NAME_SIZE_MAX  32
MyPerson(char *string, int number) {
    strncpy(name, string, sizeof(NAME_SIZE_MAX));
    age = number;
}

ここでは、受け取った引数string、numberをメンバ変数name, ageに代入しています。
このときthis->を使うとメンバ変数名と重複した名前にできます。
もっともあまりメリットがあるような気はしませんが...(-_-;)

MyPerson(char *name, int age) {
    strncpy(this->name, name, sizeof(NAME_SIZE_MAX));
    this->age = age;
}

this->name でオブジェクトのメンバ変数nameである事を明示的にしています。
一方、nameはコンストラクタの引数のnameです。

どうでしょう? コレ(this)

今日の名言
人の興味を引こうと思えば、まず自分が本当に興味を感ずることが必要だ。
                                    ジョン・モーリー子爵

真の熱中の持つ美と力について考えようではないか。そして自分であろうと他人であろうと
その目を開かせようと努力する時には、ほんの一つの熱意でも、抑えたり冷却したり
しないように気をつけようではないか。
                                    ジョセフ・タッカーマン

恐怖心を克服したければ、自分の事ばかり考えていてはダメだ。他人を助けるように
心がければ、恐怖は消え去る。

熱中は性格を作る原動力である。 物事に熱中できなければ、いくら才能があっても
いつまでも芽を出さない。大抵の人は、まだ使い方を知らない隠れた才能をたくさん
持っていると断言してよかろう。たとえ教養があり、しっかりした判断力があり、考えが
理知的であっても、心を打ち込んで思考し行動する事を知らないうちは、隠れた才能の
存在は、誰にもわからない-本人ですら知らないのだ。
                                    デール・カーネギー