2.5 構造体 強敵再び 構造体にする意味 より強い意味付け ►変数同士の関係性を表すことができる たくさんの変数を一度に定義できる ►名前の一貫性を保てる ►タイプミスのリスクを減少できる 仕様変更に強い ►追加した変数の定義し忘れを防げる 2.5 構造体 2 より強い意味付け 構造体を使わなかった例 構造体を使った例 struct ACTOR int playerHealth int health int playerAttack int attack ACTOR player; player.health = 100; 別に問題はないが・・・ より分かりやすい ► 所詮は別々の変数 ► グループ化された変数 2.5 構造体 3 変数の一括定義 敵味方とも同じステータスを持つ事はよくある ►体力、攻撃力、防御力、X座標、Y座標 など どれくらいの変数が必要か? ►必要な変数の数 = キャラの数 × ステータスの数 ►これをベタ書きで定義したら・・・? 2.5 構造体 4 変数の一括定義 int playerHealth; int playerAttack; int playerDefence; int playerX; int playerY; int enemyHealth; int enemyAttack; int enemyDefence; int enemyX; int enemyY; int friendHealth; int friendAttack; int friendDefence; // まだまだァ! 構造体 を使うと struct CHARACTER { int health; int attack; int defence; int x; int y; }; CHARACTER player; CHARACTER enemy; CHARACTER friend; 短いし見やすい 2.5 構造体 5 仕様変更に強い 作ってる途中でのシステム変更はよくある ►「すばやさ」のステータスを追加したり ►「めぢから」のステータスを削除したり 修正箇所はどれくらい? 2.5 構造体 6 仕様変更に強い int int int int playerHealth; playerAttack; playerDefence; playerSpeed; int int int int enemyHealth; enemyAttack; enemyDefence; enemySpeed; int int int int friendHealth; friendAttack; friendDefence; friendSpeed; struct CHARACTER { int health; int attack; int defence; int speed; }; 構造体 を使うと CHARACTER player; CHARACTER enemy; CHARACTER friend; 変更が少ない 2.5 構造体 7 クラスと紙一重 関数を内蔵してみよう 2.5 構造体 8 CとC++での違い Cでは・・・ ►構造体は存在するがクラスは存在しない ►構造体には関数を入れられない ►型名の struct を省略できない C++では・・・ ►構造体もクラスも存在する ►構造体にも関数を入れられる ►型名の struct を省略できる これからするのはC++の話 2.5 構造体 9 書き方は簡単 今まで作った関数を構造体の中に書くだけ ►自身の持つ変数を使うことが出来る ►他は本当に今まで通り struct ACTOR { POINT location; void move(int x, int y) { location.x += x; location.y += y; } }; 2.5 構造体 10 どんな関数を内蔵するか 構造体の意味をよく考えよう ►内蔵する意味のない関数を内蔵すべきではない ►自身の変数に関係するかどうかがひとつの目安 struct IMAGE int handle 構造体内のどの変数にも 関係ないね int sum(int, int) size getSize(void) GetGraphSize関数に handleを渡している void draw(int, int) DrawGraph関数に handleを渡している 2.5 構造体 これらの関数については リファレンスを参照 11 どんな形を目指すか 最終的には・・・ ►その構造体への指示を全て関数で行えるようにする ►構造体の外にある関数を出来るだけ少なくする (ただし関係ない関数を入れないこと) ►独立した機械を作るイメージ struct ACTOR 2.5 構造体 12
© Copyright 2024 ExpyDoc