プログラム実習(問11~問20) -後期課題-
■問11
仕様:
以下の仕様を満たしなさい
※メンバ変数名、メンバ関数名の隣の()はアクセス指定子
①.クラス定義
その①.
クラス名:
Item
メンバ変数:
char m_Name[32] (private)
int m_Price (private)
メンバ関数:
その①.
関数仕様:
デフォルトコンストラクタを定義して
メンバ変数を以下の値で初期化する
m_Name => "名無し"
m_Price => 0
その②.
関数仕様:
m_Nameのゲッター
その③.
関数仕様:
m_Priceのゲッター
その④.
関数仕様:
m_Nameのセッター
その⑤.
関数仕様:
m_Priceのセッター
②.処理実装
2-1.Itemクラスitem_01、item02という名前でインスタンス化する
2-2.以下の値でインスタンスを初期化する
item_01:
m_Price => 1000
m_Name => 胃腸薬
item_02:
m_Price => 100000
m_Name => 潰瘍性大腸炎特効薬
2-3.2-2で設定した値を取得して出力する
※出力形式は任意
■問12
仕様:
以下の仕様を満たしなさい
※1.メンバ変数名、メンバ関数名の隣の()はアクセス指定子
※2.クラス定義は「.h」メンバ関数の定義は「.cpp」で行う
①.クラス定義
その①.
ファイル名:
Point.h、Point.cpp
クラス名:
Point
メンバ変数:
float m_PosX (private)
float m_PosY (private)
メンバ関数:
必要な処理を各自で作成
その②.
ファイル名:
Rect.h、Rect.cpp
クラス名:
Rect
メンバ変数:
float m_StartPosX (private)
矩形の始点座標X
float m_StartPosY (private)
矩形の始点座標Y
float m_Width (private)
矩形の横幅
float m_Height (private)
矩形の縦幅
メンバ関数:
必要な処理を各自で作成
②.関数定義
ファイル名:
main.cpp
(main関数があるファイルならmain.cppじゃなくてもOK)
関数名:
IsInside
戻り値:
true:
ポイントクラスの座標が矩形の中
false:
ポイントクラスの座標が矩形の外
引数:
Point point
ポイントクラス
Rect rect
矩形クラス
内容:
ポイントクラスの座標が矩形クラスの中にあるかどうかを判定する
③.実行
3-1.main関数内でPointクラスとRectクラスをインスタンス化して
二つのクラスを任意の値で初期化する
3-2.IsInsideに3-1で作成したインスタンスを渡して関数を実行する
3-3.3-2で得た結果を出力
true => 「矩形の中」
false => 「矩形の外」
■問13
仕様:
以下の仕様を満たしなさい
①.クラス定義
その①.
ファイル名:
CharaBase.h、CharaBase.cpp
クラス名:
CharaBase
メンバ変数:
float m_PosX (実装に適したアクセス指定子)
float m_PosY (実装に適したアクセス指定子)
float m_Angle (実装に適したアクセス指定子)
float m_Scale (実装に適したアクセス指定子)
メンバ関数:
その①.
関数名:
コンストラクタ
引数:
なし
内容:
メンバ変数の値を全て0で初期化する
その②.
ファイル名:
Character.h、Character.cpp
クラス名:
Caracter
継承クラス:
CharaBase
メンバ変数:
char m_Name[32] (private)
メンバ関数:
その①.
関数名:
コンストラクタ
引数:
char *name:
m_Nameに使用する初期値
内容:
引数の値で初期化する
その②.
関数名:
PrintInfomation
戻り値:
なし
引数:
なし
内容:
CharaBaseを含めたメンバ変数の値を出力する
②.処理実装
2-1.Characterクラスをインスタンス化する
2-2.2-1で作成したインスタンスのPrintInfomationを呼び出す
■問14
仕様:
以下の仕様を満たしなさい
①.クラス定義
その①.
ファイル名:
CharaBase.h、CharaBase.cpp
クラス名:
CharaBase
メンバ変数:
float m_PosX (実装に適したアクセス指定子)
float m_PosY (実装に適したアクセス指定子)
float m_Angle (実装に適したアクセス指定子)
float m_Scale (実装に適したアクセス指定子)
メンバ関数:
その①.
関数名:
コンストラクタ
引数:
float pos_x
m_PosX用の初期値
float pos_y
m_PosY用の初期値
float angle
m_Angle用の初期値
float scale
m_Scale用の初期値
内容:
メンバ変数を引数の値で初期化する
※出力形式は任意
その②.
ファイル名:
Character.h、Character.cpp
クラス名:
Caracter
継承クラス:
CharaBase
メンバ変数:
char m_Name[32] (private)
メンバ関数:
その①.
関数名:
コンストラクタ
引数:
char *name:
m_Nameに使用する初期値
float pos_x
m_PosX用の初期値
float pos_y
m_PosY用の初期値
float angle
m_Angle用の初期値
float scale
m_Scale用の初期値
内容:
引数の値で初期化する
その②.
関数名:
PrintInfomation
戻り値:
なし
引数:
なし
内容:
CharaBaseを含めた引数の値を出力する
※出力形式は任意
②.処理実装
2-1.Characterクラスをインスタンス化する
2-2.2-1で作成したインスタンスのPrintInfomationを呼び出す
■問15
仕様:
以下の仕様を満たしなさい
①.クラス定義
その①.
ファイル名:
EnemyBase.h、EnemyBase.cpp
クラス名:
EnemyBase
メンバ関数
その①.
関数名:
PrintClassInfomation
戻り値:
なし
引数:
なし
内容:
「敵の基底クラス」と出力する
その②.
ファイル名:
Slime.h、Slime.cpp
クラス名:
Slime
継承クラス:
EnemyBase
メンバ関数
その①.
関数名:
PrintClassInfomation
戻り値:
なし
引数:
なし
内容:
「スライム」と出力する
その③.
ファイル名:
Skeleton.cpp、Skeleton.h
クラス名:
Skeleton
継承クラス:
EnemyBase
メンバ関数
その①.
関数名:
PrintClassInfomation
戻り値:
なし
引数:
なし
内容:
「スケルトン」と出力する
②.処理実装
以下の出力結果になるようにmain関数内に処理を実装しなさい
出力結果:
敵の基底クラス
スライム
スケルトン
■問16
仕様:
以下の仕様を満たしなさい
①.クラス定義
その①.
ファイル名:
CharaBase.h、CharaBase.cpp
クラス名:
CharaBase
メンバ関数
その①.
関数名:
PrintClassInfomation
戻り値:
なし
引数:
なし
内容:
純粋仮想関数
その②.
ファイル名:
Player.h、Player.cpp
クラス名:
Player
基底クラス:
CharaBase
メンバ関数:
関数名:
PrintClassInfomation
戻り値:
なし
引数:
なし
内容:
「プレイヤークラス」と出力する
その③.
ファイル名:
Enemy.h、Enemy.cpp
クラス名:
Player
基底クラス:
CharaBase
メンバ関数:
関数名:
PrintClassInfomation
戻り値:
なし
引数:
なし
内容:
「敵クラス」と出力する
②.処理実装
以下の出力内容になるように処理を実装しなさい
プレイヤークラス
敵クラス
※以下のようなEnemy、Playerクラスのインスタンスに対して
直接メンバ関数を呼び出す形式はNG
Player pl;
Enemy C;
pl.PrintClassInfomation();
en.PrintClassInfomation();
■問17
仕様:
以下の仕様を満たしなさい
①.クラス定義
その①.
ファイル名:
Robot.cpp、Robot.h
クラス名:
Robot
メンバ変数:
char m_Name[64]
int m_BodyWeight
int m_Height
メンバ関数
その①.
関数名:
Robot
引数:
int body_weight:
m_BodyWeightの初期値
int height:
m_Heightの初期値
char *name:
m_Nameの初期値
内容:
①.引数の値を使用してメンバ変数を初期化する
※nameの部分は引数指定がなかったら「名無し」と
設定するようにする
②.メンバ変数の内容を出力する
体重 = m_BodyWeightの値
身長 = m_Heightの値
名前 = m_Nameの値
②.処理実装
以下のインスタンス書式でコンパイルするようにしなさい
Robot robot1(80, 160, "ロボ1");
Robot robot2(100, 200);
出力結果:
体重 = 80
身長 = 160
名前 = ロボ1
体重 = 100
身長 = 200
名前 = 名無し
■問18
仕様:
以下の仕様を満たしなさい
①.処理実装
main関数内に以下の処理を記述して
出力結果になるようにクラスを実装しなさい
void main(void)
{
{
Parent *parent = new Child();
delete parent;
}
}
出力結果:
親のコンストラクタ
子のコンストラクタ
子のデストラクタ
親のデストラクタ
②.クラス概要
以下のクラスを実装し、①の処理を実現するために
必要な処理を追記しなさい
その①.
ファイル名:
Parent.cpp、Parent.h
クラス名:
Parent
メンバ関数:
その①.
関数名:
コンストラクタ
引数:
なし
内容:
「親のコンストラクタ」と出力する
その②.
関数名:
デストラクタ
引数:
なし
内容:
「親のデストラクタ」と出力する
その②.
ファイル名:
Child.cpp、Child.h
クラス名:
Child
継承クラス
Parent
メンバ関数:
その①.
関数名:
コンストラクタ
引数:
なし
内容:
「子のコンストラクタ」と出力する
その②.
関数名:
デストラクタ
引数:
なし
内容:
「子のデストラクタ」と出力する
■問19
開発中
■問20
仕様:
以下の仕様を満たしなさい
①.クラス定義
クラス名:
Gauge
メンバ変数:
float m_Min:
ゲージの最小値
float m_Max:
ゲージの最大値
float m_Now:
現状のゲージの値
float m_Next:
新しいゲージの値
float m_UpdateSpeed:
更新速度
メンバ関数:
その①.
関数名:
コンストラクタ
引数:
float min:
m_Minの値
float max:
m_Maxの値
float update_speed:
m_UpdateSpeedの値
float now:
初期値(デフォルトはminの値)
内容:
引数の内容でメンバを初期化する
m_Nextもnowで初期化する
その②.
m_Minのゲッター
※インライン関数化
その③.
m_Maxのゲッター
※インライン関数化
その④.
m_Nowのゲッター
※インライン関数化
その⑤.
m_Nextのゲッター
※インライン関数化
その⑥.
関数名:
UpdateGauge
戻り値:
なし
引数:
float new_val:
新しいゲージの値
内容:
引数の値でm_Nextを更新する
m_Nextの値がm_Minより下、
またはm_Maxより上にならないようにする
※m_Nextのセッター
その⑦.
関数名:
Control
戻り値:
なし
引数:
なし
内容:
m_Nowとm_Nextの値が異なる場合、
m_UpdateSpeedを使用して値を調整する
値の調整はm_Nowの値をm_Nextにあわせるように調整する
②.実装仕様:
main関数内で以下の仕様を実装しなさい
2-1.クラスのインスタンス化
①で作成したクラスを以下のデータでインスタンス化しなさい
m_Min:
0
m_Max:
100
m_Now:
50
m_UpdateSpeed:
2
2-2.UpdateGaugeゲージの呼び出し
インスタンス化したGaugeクラスのUpdateGaugeを引数100の値で呼び出しなさい
2-3.数値調整
m_Nowとm_Nextの値に誤差がなくなるまでループ処理を行いなさい