前提・実現したいこと
C++でRPGじみた簡単なゲームを作りたいです。
そこでオブジェクト内のprivateメンバ変数(ここではHP)が0になったら、そのオブジェクトを破棄するという仕様を作りたいです。別クラスのオブジェクト内のメンバ関数(attack関数)でHPがゼロ以下になったらその関数内で、参照中のオブジェクトを破棄したいです。
今回はHPがゼロになる可能性のある関数に、オブジェクトを破棄する仕組みを加えるつもりですが、そもそもクラスの中に、メンバ変数が一定の条件を満たしたときに、オブジェクトを破棄する仕組みがあれば教えてほしいです。
該当のソースコード
言語はc++です
#include<iostream>
using namespace std;
class test{
int HP;
public:
test(int hp){cout <<"コンストラクタ"<<endl; HP = hp;}
~test(){cout <<"デストラクタ"<<endl;}
int getHP(){return HP;}
int setHP(int hp){HP = hp;}
};
class systems{
public:
void damage(int d, test &ob){
int hp;
hp = ob.getHP() - d;
ob.setHP(hp);
if(hp <= 0){ cout << d << " ダメージ受けた!!\n"; cout <<"HPがゼロになった\n"; /* ここで参照中のオブジェクトを破棄 */ }else{ cout << d << " ダメージ受けた!!\n"; } }
};
int main(){
test *t, t1(50);
systems s1;
t = &t1; s1.damage(20,*t); cout << t1.getHP() <<endl; s1.damage(30,*t); cout <<"終了\n"; return 0;
}
### 試したこと ob.~test()で直接デストラクタを呼び出してもうまくいきませんでした。
回答2件
あなたの回答
tips
プレビュー