プログラム実習(問1~問10) -後期課題-

■ルール

	・30問以上解答で合格
	・問題の合否は中地が判断する
	・提出記述は1/27(18:10)まで
	・提出時はTask02_名前(ローマ字表記)というフォルダを作成し、
	 そこにプロジェクトを入れて提出すること
	・コンパイルは必ず通るものを作成すること
	・アクセス指定子は指定がなければ「public」とする
	・ソリューションは問題の大項目毎に作成する
	・ソリューション名の仕様は以下の通り

		PG_CPP_***

		*** => 問題の項目番号
			例:
				問1 => PG_CPP_001
				問2 => PG_CPP_002

	・ファイル名指定がされている場合はそのファイルを作成し、
	 そこに定義を行うこと
	・ヘッダファイルにはインクルードガードを必ず使用すること
	・メンバ変数名、メンバ関数名の隣の()はアクセス指定子
	・インデントはきちとして、読みやすいソースにする
	・main関数は必ず実装する

■問1

	仕様:
		以下の仕様のクラスを定義しなさい
			クラス名:
				Character

			メンバ変数:
				なし

			メンバ関数:
				なし

■問2

	仕様:
		以下の仕様のクラスを定義しなさい
			クラス名:
				Player

			メンバ変数:
				int型 m_Hp
				int型 m_Mp
				int型 m_Level
				
			メンバ関数:
				なし

■問3

	仕様:
		以下の仕様を実装しなさい

		1.以下の仕様のクラスを定義しなさい
			クラス名:
				Calculator

			メンバ変数:
				なし

			メンバ関数その1:
				関数名:
					Add
				戻り値:
					型:int
					内容:二つの引数を使用した足し算の結果
				引数:
					int:
						計算に使用する値その1
					int:
						計算に使用する値その2
				内容:
					引数その1とその2を足した値を返す
			
			メンバ関数その2:
				関数名:
					Sub
				戻り値:
					型:int
				
				引数:
					int:
						計算に使用する値その1
					int:
						計算に使用する値その2
				内容:
					引数その1からその2引いた値を返す
			
			メンバ関数その3:
				関数名:
					Mul
				戻り値:
					型:int
				引数:
					int:
						計算に使用する値その1
					int:
						計算に使用する値その2
				内容:
					引数その1と引数その2を掛け合わせた結果
			メンバ関数その4:
				関数名:
					Div
				戻り値:
					型:float
				引数:
					float:
						計算に使用する値その1
					float:
						計算に使用する値その2
				内容:
					引数その1を引数その2で割った結果
					※0割り注意

			2.main関数でCalculatorをインスタンス化しなさい

			3.定義されているメンバ関数をどのような形でもいいので、
			  全て使用しなさい

■問4

	仕様:
		Calculatorクラスのメンバ関数Addを対してオーバーロードして
		以下の仕様で追加しなさい

		class Calculator
		{
		public:
			int Add(int a, int b)
			{
				return (a + b);
			}
		}

		オーバーロード仕様
			戻り値:
				float:aとbを足した合計値
			引数:
				float a
				float b
			内容:
				float型の引数aとbを足した合計値を返す

■問5

	仕様:
		以下の仕様満たしなさい

		①.クラス定義
			クラス名:
				Drawer

			メンバ変数:
				float m_PosX
				float m_PosY
				float m_Angle
				float m_Scale

			メンバ関数:
				その1:
					関数名:
						コンストラクタ
					引数:
						なし
					内容:
						以下の値でメンバ変数を初期化する

						m_PosX => 0.0f
						m_PosY => 0.0f
						m_Angle => 0.0f
						m_Scale => 0.0f

				その2:
					関数名:
						PrintParameter
					戻り値:
						なし
					引数:
						なし
					内容:
						各メンバ変数の値を出力する
						(出力形式は任意)

		②.クラスのインスタンス化
			main関数内でDrawerをインスタンス化して
			PrintParameterを呼び出しなさい

■問6

	仕様:
		以下の仕様を満たしなさい

		①.クラス定義
			以下の仕様のクラスを定義しなさい

			クラス名:
				Character

			メンバ変数:
				char m_Name[32]
				int m_Hp
				int m_Mp
				int m_At
				int m_Deff

			メンバ関数:
				その①.
					関数内容:
						デフォルトコンストラクタを定義し、
						以下の値でメンバ変数を初期化する

						m_Name => 名無し
						m_Hp => 0
						m_Mp => 0
						m_At => 0
						m_Deff => 0

				その②.
					関数名:
						コンストラクタ
					引数:
						char * name:
							m_Name初期化用
						int hp:
							m_Hp初期化用
						int mp:
							m_Mp初期化用
						int at:
							m_At初期化用
						int deff:
							m_Deff初期化用
					内容:
						引数の値でメンバ変数を初期化する

						m_Name => name
						m_Hp => hp
						m_Mp => mp
						m_At => at
						m_Deff => deff

				その③.
					関数名:
						PrintParameter
					戻り値:
						なし
					引数:
						なし
					内容:
						メンバ変数を全て出力する
						(出力形式は任意)
		②.インスタンス化
			main関数内でインスタンス化したCharacterクラスを二つ用意し、
			1つは引数なしのコンストラクタ、もう1つは引数有りのコンストラクタとします。
			インスタンスに対してPrintParameterを呼び出します。

■問7

	仕様:
		以下の仕様を満たしなさい

		①.クラス定義
			以下の仕様のクラスを定義しなさい

			クラス名:
				Jugyoin

			メンバ変数:
				int m_ID
				char m_Name[32]

			メンバ関数:
				その①.
					関数名:
						コンストラクタ:
					引数:
						char *name
					内容:
						①.「static int EntryID」を宣言し1で初期化する
						②.m_IDをEntryIDで初期化する
						③.EntryIDに1を加算する
						④.nameの内容をm_Nameにコピーする
				その②.
					関数名:
						PirntInfomation
					戻り値:
						なし
					引数:
						なし
					内容:
						メンバ変数の内容を出力する
						(出力形式は任意)
				その③.
					関数名:
						デストラクタ
					引数:
						なし
					内容:
						「デストラクタ」と出力する

		②.Jugyoinクラスのインスタンス化
			Jugyoinクラスのインスタンス「satou」「suzuki」を作成し、
			PirntInfomationを呼び出しなさい。

			インスタンス化の内容:
				satouのコンストラクタの実引数「佐藤」
				suzukiのコンストラクタの実引数「鈴木」

■問8

	仕様:
		以下の仕様を満たしなさい

		①.クラス定義
			クラス名:
				Test
			メンバ関数:
				その①.
					関数名:
						コンストラクタ
					引数:
						なし
					内容:
						「コンストラクタ」と出力する

				その②.
					関数名:
						デストラクタ
					引数:
						なし
					内容:
						「デストラクタ」と出力する
		②.インスタンス化
			2-1.Testクラス型のポインタ変数を宣言
				Testクラス型のポインタ変数を宣言し、
				動的に確保したTestクラスのメモリ領域を代入しなさい
			2-2.解放
				2-1の次の行で2-1で確保したメモリの解放をしなさい

■問9

	仕様:
		以下の仕様を満たしなさい

		①.クラス定義
			※メンバ変数名、メンバ関数名の隣の()はアクセス指定子
			クラス名:
				Character
			メンバ変数:
				int m_Hp (private)
				int m_Mp (private)
				int m_At (private)
				int m_Deff (private)

			メンバ関数:
				その①.
					関数名:
						デフォルトコンストラクタ(public)
					内容:
						メンバ変数を全て0で初期化する

		②.クラスのインスタンス化
			main関数内でCharacterクラスをインスタンス化する

■問10

	仕様:
		以下の仕様を満たしなさい
		※メンバ変数名、メンバ関数名の隣の()はアクセス指定子

		①.クラス定義
			その①.
				クラス名:
					Item
				メンバ変数:
					char m_Name[32] (private)
					int m_Price (private)

				メンバ関数:
					その①.
						関数名:
							コンストラクタ

						引数:
							char *name:
								m_Nameの初期値
							int price:
								m_Priceの初期値
					その②.
						関数仕様:
							m_Nameのゲッター

					その③.
						関数仕様:
							m_Priceのゲッター

		②.処理実装
			2-1.main関数内でItemをインスタンス化する
			  ※引数の値は任意で設定

			2-2.2-1のメンバ変数m_Name、m_Priceの値をゲッターを使用して取得し、
			  それを出力する
			  ※出力形式は任意で設定