C++ 在C++;当我们创建对象时,构造函数会初始化,但是如果我想再次初始化对象,比如说在main中的某个点,该怎么做?

C++ 在C++;当我们创建对象时,构造函数会初始化,但是如果我想再次初始化对象,比如说在main中的某个点,该怎么做?,c++,oop,C++,Oop,例如,我有以下示例代码: class Player { int grid; Player() { grid = 0; } } void main() { Player p; ... ... //now again I want to initialize p here, what to write ? } 如何再次调用p的构造函数?Addinit函数。在构造函数中调用它,但也要将其公开,以便以后可以再次调用它 实际上,您可以创建任何

例如,我有以下示例代码:

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

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

如何再次调用p的构造函数?

Add
init
函数。在构造函数中调用它,但也要将其公开,以便以后可以再次调用它

实际上,您可以创建任何要更改状态的函数:

class Player
{
public:
    void setState(/*anything you want*/) {}
};

将对象放入本地范围:

while (running)
{
    Player p;  // fresh

    //...
}

每次循环体执行时,都会实例化一个新的
Player
对象。

强化Andrew的回答:

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.
}

因为,如果你正在制作一个游戏,而玩家想要再次玩,那么所有对象都必须重新初始化,这有意义吗?然后你再返回:
while(!done){player p;p.play();}
@BoPersson是否可以一次又一次地创建对象p?如果你每次都想要一个新的初始化对象,那么只需创建一个。这是最简单的方法。我认为你是对的,只是想如果构造函数不能被再次调用,而不是再次生成不同的函数……不过,要使它正确工作,你可能必须实现赋值运算符(这并不总是简单或可取的)。通常最简单、最有效的方法就是销毁旧对象并分配一个新对象。这种构造函数是非常糟糕的做法(就像
voidmain
)。你应该使用初始化列表。@ USE183177:这是C++给你的,你知道它是正确的,当它感觉最好。
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.
}