2013年9月7日土曜日

C++ 参照とは何か?

今回はC++で使えるようになった参照という機能の紹介です。^^
この機能を使えば、変数に別名(エイリアス)をつけることができます。
例えば、参照を使って変数numberに別名newnumをつけるとこのようになります。

int number;
int &newnum = num;  //もととなる変数と同じ型で宣言してください
                               //&newnum で参照の宣言です^^

このように別名をつけると、元々の変数名でも別名でも同じようにアクセスできます。
どちらかの値を変更すると、もう一方も変更されます。

#include <iostream>

using namespace std;

int main(void)
{
    int number = 0;
    int &newnum = number;

    newnum = 10;
    cout << "number = " << number << endl;
    cout << "newnum = " << newnum << endl;  //アクセス方法に注目です。
                               //&が要りません。
    return 0;
}

実行結果
# ./test
number = 10
newnum = 10

number, newnumのどちらも同じ10になっています。
同じことをCで実現すると、ポインタを使います。しかし、ポインタの場合は
その指示す先のデータにアクセスするときは*(アスタリスク)をつけなければ
なりません。

プログラム例
int number;
int *newnum = &number;  //ポンタの宣言と代入

*newnum = 100;  //*を付けてアクセス、星々の問題が!?

参照のほうがシンプルですね。(^^)
このように、わずか1文字でも入力は少なくするのがポイントです。

もう少しだけ参照で遊んだサンプルプログラム
#include <iostream>

using namespace std;

int main(void)
{
    int number = 0;
    int &newnum = number;  //参照の宣言

    newnum = 10;       //まずnewnumに10を代入
    cout << "number = " << number << endl;
    cout << "newnum = " << newnum << endl;

    number = 100;      //今度はnumberに100を代入 
    cout << "number = " << number << endl;
    cout << "newnum = " << newnum << endl;

    newnum = 1000;          //最後はまたnewnumに
    cout << "number = " << number << endl;
    cout << "newnum = " << newnum << endl;

    return 0;
}

実行結果
# ./test2
number = 10
newnum = 10
number = 100
newnum = 100
number = 1000
newnum = 1000

newnumはnumberの別名なので、どちらの値を変更しても
もう一方が同じ値になっています(^^)

今日の名言
信念を持たない限り、人に信念を与えることはできない。自分で納得いかない限り、
人を納得されることはできない。
                                 マシュー・アーノルド

人生もフットボールも原則は同じだ。ラインに向かって突っ込め、ファウルするな。
ボールから身をかわすな。ラインに向かって突っ込め。
                                 セオドア・ルーズヴェルト

失敗は成功の母である。落胆と失敗は、人を確実に成功に向かわせる二つの
試金石である。この二つを自発的に研究し、何か今後に役立てられることを
掴み取ることができれば、これほどプラスになるものはない。過去を振り返ってみよう。
失敗が成功の助けになった場合があるはずだ。
                                 デール・カーネギー

天才は力の集結である。手に入れる価値が有るものなら何でも手当たり次第に
手に入れる人間は、猫を追うブルドッグのように、全身の筋肉を緊張させて、
ただひたすらに自分の目標に向かって進む。
                                 W・C・ホルマン