忍者ブログ

神戸電子専門学校ゲームソフト学科の生徒が運営するGESのブログです。

   

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

第9回 C++講座 『閑話休題ツー』


こんばんは、辻です。
今回はいつもの中原君ではなく、私が書きたいと思います。

拍手[0回]



今回のお題は...『 参照(リファレンス) 』です。

参照はC++の機能で、参照した変数の別名というものです。
分かりづらいですが、ポインタのようなものと考えてください。

参照は、初期化時に必ず他の変数への参照が必要です。

int& ref;

これはエラーです。
何故かというと、参照は他の変数の別名だからです。
別名なのに、何も無いというのはおかしいですよね。

では、実際に使ってみましょう!

class Hoge
{
public :

    int a;
};

void main(void)
{
  Hoge h;
    h.a = 10;

    // 参照を保存する
    Hoge& ref = h;

    ref.a *= 2;

    printf( "%d", h.a );
}

出力されるのは20です。
ポインタと同じように、参照先の変数の値を変更することが出来ます。
参照先へアクセスするときは「.」を使います。


さて、参照を少し学んだところで少し役立つ使い方を試してみましょう。

class Chara
{
public :

    char name[128];
};

// キャラクターの名前を表示する関数
void dispName( struct Chara chara )
{
    printf( "NAME : %s", chara.name );
}

void main(void)
{
    Chara Nhara;
    Nhara.name = "Rsuke";

    dispName( Nhara );
}

皆さんは自分で関数を作成するときに、こんな風にしていませんか?

構文的には全く問題は無いのですが...

Chara Nhara;

Nhara.name = "Rsuke";

Chara chara = Nhara;

printf( "NAME : %s" chara.name );

関数では、このような処理が行われています、
この処理だと、128バイト無駄なメモリを使っていますね。
関数に実体を渡す、これを「実体渡し」といいます。

この関数の場合は、実体渡しでは効率が悪いです、
このプログラムを効率よくするには...

先ほどの参照を行えばいいのです!
早速使ってみましょう。

// キャラクターの名前を表示する関数
void dispName( const struct Chara& chara )
{
    printf( "NAME : %s", chara.name );
}

void main(void)
{
    Chara Nhara;
    Nhara.name = "Rsuke";

    dispName( Nhara );
}

constは皆さん知っていますか?
指定された変数の値を変更できなくする修飾子です。
dispName関数では、引数のchara変数の値を変える必要は無いので、
constを指定しています。

これでコピーは行われずに、データのみを参照することが出来、
無駄なコピーが行われません。

ちなみに、組み込み型(intなどの最初からある型)の場合は、
実体渡しのほうが効率的です。


以上、辻でした。
 


PR

COMMENT

NAME
TITLE
MAIL(非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS(コメント編集に必須です)
SECRET
管理人のみ閲覧できます

TRACKBACK

Trackback URL:

ブログ内検索

最新コメント

[01/29 人面犬]
[10/01 8ch]
[09/12 uncle]
[09/10 某卒業生]
[06/07 uncle]

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

テスト

Copyright ©  -- GESブログ --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]