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