見出し画像

C++継承 を使って複数のクラスを管理する!

こんにちは~!
今回は継承を使っていきます!


まず初めに、基底クラスのを作っていきます!

親クラス

 /***********************************************
		      クラス
 ***********************************************/
class GameObject
{
public:

	/***********************************************
			   定数
	***********************************************/

protected:

	/***********************************************
				 変数
	***********************************************/

	//座標
	DirectX::SimpleMath::Vector3 mPosition;

	//速度
	DirectX::SimpleMath::Vector3 mVelocity;

	//ID
	eOBJECT_ID mID;

	//体力
	int mHitCounter;

	//半径サイズ
	float mRadius;


public:

	/***********************************************
    		  関数
	***********************************************/

	/**
	* @brief コンストラクタ
	* @param hitPos 当たった座標
	*/
	GameObject(const DirectX::SimpleMath::Vector3& hitPos);

	/**
	* @brief デストラクタ
	*/
	virtual ~GameObject() = default;

	/**
	* @brief 初期化
	*/
	virtual void Initialize() = 0;

	/**
	* @brief 更新
	* @param [in] timer タイマー
	*/
	virtual void Update(const DX::StepTimer& timer) = 0;

	/**
	* @brief 描画
	* @param [in] view ビュー行列
	* @param [in] projection 射影行列
	*/
	virtual void Draw(DirectX::SimpleMath::Matrix* view, DirectX::SimpleMath::Matrix* projection) = 0;

	/**
	* @brief 終了処理
	*/
	virtual void Finalize() = 0;

ざっくりとこんな感じです。

protected:派生先でも同じ変数を扱う場合のみだけを定義します。
public:virtual type function() = 0;  純粋仮想関数です。基底クラスでは使用しないため = 0をしています。

派生クラス

 //アクターの基底クラス
class Player01 :public GameObject
{
private:
	/**************************************************
				変数
	**************************************************/

public:

	/**************************************************
				関数
	**************************************************/

	/**
	* @brief コンストラクタ
	*/
	Player01(const DirectX::SimpleMath::Vector3& hitPos);

	/**
	* @brief デストラクタ
	*/
	~Player01() override;

	/**
	* @brief 初期化
	*/
	void Initialize() override;

	/**
	* @brief 更新
	* @param [in] timer タイマー
	*/
	void Update(const DX::StepTimer& timer) override;

	/**
	* @brief 描画
	* @param [in] view ビュー行列
	* @param [in] projection 射影行列
	*/
	void Draw(DirectX::SimpleMath::Matrix* view, DirectX::SimpleMath::Matrix* projection) override;

	/**
	* @brief 終了処理
	*/
	void Finalize() override;

派生先では、先ほど virtual をつけたものに関しては、 override します。
しないと

エラー画像

このようなエラーが発生します。
もし似たようなエラーを見つけたら、基底クラスと、派生クラスを見比べて、 ”virtual したすべての関数が override されているか?” "関数をちゃんと実装しているか?" を確認するとよいでしょう。

派生したものをまとめて管理

継承してない場合

そのクラス限定でしか、生成できない

継承している場合

限定されず、GameObjectを派生したクラスを、どれでも生成できる


配列で管理して、一括で処理を行うことが出来るため便利!
今後も増やしたい要素があるときも、簡単に行うことが出来る!
以上です!


いいなと思ったら応援しよう!