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を派生したクラスを、どれでも生成できる
配列で管理して、一括で処理を行うことが出来るため便利!
今後も増やしたい要素があるときも、簡単に行うことが出来る!
以上です!