たとえば、私はこのサンプルコードを持っています:
class Player
{
int grid;
Player()
{
grid = 0;
}
}
void main()
{
Player p;
...
...
//now again I want to initialize p here, what to write ?
}
pのコンストラクターを再度呼び出すにはどうすればよいですか?
オブジェクトをローカルスコープに配置します。
while (running)
{
Player p; // fresh
//...
}
ループ本体が実行されるたびに、新しいPlayer
オブジェクトがインスタンス化されます。
class Player
{
int grid;
Player()
{
grid = 0;
}
}
void main()
{
Player p;
...
...
//now again I want to initialize p here, what to write ?
p = Player();
}
関数を追加init
します。コンストラクターで呼び出しますが、パブリックにすることもできるので、後でもう一度呼び出すことができます。
実際には、状態を変更したい任意の関数を作成できます。
class Player
{
public:
void setState(/*anything you want*/) {}
};
アンドリューの答えを補強する:
class Player
{
public:
Player()
{
reset(); //set initial values to the object
}
//Must set initial values to all relevant fields
void reset()
{
m_grid = 0; //inital value of "m_grid"
}
private:
int m_grid;
}
int main()
{
Player p1;
Player* p2 = new Player();
...
...
p1.reset();
p2->reset(); //Reset my instance without create a new one.
}