Simplestar Game

How do I create a 3D game ?
http://simplestar.syuriken.jp/
since 17/01/2009
  • BACK
  • HOME
  • NEXT
  • |

:::::::::::018話 クラスの基本:::::::::::

どうも,星姫でーす.
前回はDXUTを触ろうと示唆しましたが,一度C++言語の基本を学ぼうと思います.
最初はクラスの基本からやってみましょう.

色も香りも味も音も,五感のほとんどで感じることが出来ないプログラムを,理解することがどれほど難しいか!
記憶もいつかは消えていくもの,読み直して価値ある資料になると良いのですが…

では本題に入ります.
プロジェクト名「ClassTest」として,新規でプロジェクトを用意して下さい.

クラスを扱う前に,構造体くらいは触っておきましょう.
ということで「struct」を勉強してみましょう,いつもの場所で↓

「初心者のためのポイント学習C言語」
http://www9.plala.or.jp/sgwr-t/

では構造体についてわかったところで(雑!?),クラスと構造体の違いを考えてみましょう.
構造体とは,異なる型のデータメンバを我々が自由に設定できる型のことでした.
クラスとは,構造体のメンバに関数を設定できるもののことです.
作り方は簡単!以下の図を追いながら一緒に作ってみましょう.

右クリックで出てくる追加を「クラス」として選ぶだけ!

テンプレートはもちろん「C++クラス」を選んで下さい

クラス名を聞いてくるので「ClassA」とか任意で名前を決定します.

作業が完了すれば,.cppファイルと.hファイルが作成されます.
これでクラスの実装は完了です.簡単でしょ?

詳しく見てみるとクラス名と同じ名前の関数が二つ,チルダ(~)が付いているものと付いていないものが有りますね.
これらをメンバ関数と呼びますが,まずその働きを見てみましょう.
まずは,空のエントリポイント(main関数)を以下のコードで作成してください.


先ほど作ったClassA.hを読み込んでエラーが出ないことを確認します.
この時点で,ディフォルトで用意されていた二つの関数を書き込んだことになります.
この最初に用意された関数をそれぞれコンストラクタとデストラクタと言います.
クラスオブジェクト(ca)を定義した瞬間にコンストラクタが呼ばれ,オブジェクトを解放する瞬間にデストラクタが呼ばれます.
確認してみるのが早いですね,試してみましょう.

Main.cpp


ClassA.h


ClassA.cpp


このプロジェクトの実行結果は次のようになります.

感じ取れましたか?
最初にクラスオブジェクト(インスタンスとも言う)caを作成した瞬間にコンストラクタが呼ばれ
main関数から抜けた瞬間(定義したスコープから出た瞬間)にデストラクタが呼ばれています.

この現象が納得できるのならば,コンストラクタとデストラクタについての理解はほぼ完璧です.
コンストラクタに引数を設定する便利な使い方もあるようですが
詳しいことは必要に応じて教科書から覚えるだけなので心配いりません.

最後に,private と public の違いを記しておきます.
クラスのメンバにmain関数からアクセスして,値を受け取ったり,変更しようとする場合について
おそらくコンパイルが通らない現象に見舞われると思います.試してみましょう.

Main.cpp


ClassA.h


ClassA.cpp


このまま実行すると,以下のエラーが報告されます.

エラーが出た原因は privateメンバにアクセスした為に起こりました.
逆に publicメンバにアクセスすることは許されていたことになります.
この現象から,この2つのキーワードについての理解をして下さい.
では,エラーが出た行をコメントアウトします.(説明したっけ? "//"で書き始めるか,"/* */"で囲う緑色のやつ)
実行結果は以下のようになります.

新たにキーワード struct, class, private, public, this の5つを今回は習得しました.
現在25手といったところでしょうか?
次回は,クラスの機能を見ていきましょう.

以上,クラスの基本でした.

2010/01/01 初記.
2010/01/10 追記.

あけましておめでとうございます.
今年から社会人になります.

:::::::::::018話 クラスの基本:::::::::::

  • BACK
  • HOME
  • NEXT
ホームページ制作 フリー素材 無料WEB素材
Copyright (C) Simplestar All Rights Reserved.