2

たとえば、私はこのサンプルコードを持っています:

class Player
{
   int grid;
   Player()
   {
      grid = 0;
   }

}
void main()
{
   Player p;
   ...
   ...
   //now again I want to initialize p here, what to write ?
}

pのコンストラクターを再度呼び出すにはどうすればよいですか?

4

4 に答える 4

5

オブジェクトをローカルスコープに配置します。

while (running)
{
    Player p;  // fresh

    //...
}

ループ本体が実行されるたびに、新しいPlayerオブジェクトがインスタンス化されます。

于 2012-08-09T13:46:39.513 に答える
4
class Player
{
   int grid;
   Player()
   {
      grid = 0;
   }

}
void main()
{
   Player p;
   ...
   ...
   //now again I want to initialize p here, what to write ?
   p = Player();
}
于 2012-08-09T13:40:20.293 に答える
3

関数を追加initします。コンストラクターで呼び出しますが、パブリックにすることもできるので、後でもう一度呼び出すことができます。

実際には、状態を変更したい任意の関数を作成できます。

class Player
{
public:
    void setState(/*anything you want*/) {}
};
于 2012-08-09T13:34:43.960 に答える
0

アンドリューの答えを補強する:

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.
}
于 2012-08-10T15:42:43.993 に答える