Heyy,我正在尝试从构造函数中初始化变量到使用构造函数初始化列表。
所以不要写
Class::Class(int width, int height) {
this->width = width;
this->height = height;
}
我这样做:
Class::Class(int width, int height) :
width(width),
height(height) {
}
这一切都有效,但现在我的问题......说我有以下构造函数:
Class::Class(int width, int height) {
this->width = width;
this->height = height;
this->state.setCurrState(this->state.stateMenu);
this->state.setPrevState(this->state.getCurrState());
}
“state”只是我在标题中创建的“State”类的对象。函数setCurrState和setPrevState属于void类型,只是设置类的私有变量。
如何转换构造函数?我知道可以在初始化列表中编写函数,但我想添加的函数不返回任何内容......它们是无效的,所以我不知道如何调用它们?
Class::Class(int width, int height) :
width(width),
height(height)
// call functions here... but how?
{
}
非常感谢你,希望你能帮助我< 3
答案 0 :(得分:3)
在初始化列表中调用这些函数没有其他的优点和优势,至少在你的情况下是这样。
只需在构造函数体中调用它们即可。
重要提示:
您说state
是Class
的成员。所以在构造函数级别中,state
尚未构造,然后单独构造它在某种程度上是没有意义的:
<击> 撞击>
<击>state.setCurrState(state.stateMenu);
state.setPrevState(state.getCurrState());
击> <击> 撞击>
尝试为state
的类写一个well构造函数,将curr / prev设置为初始状态。
答案 1 :(得分:0)
简单的解决方案:将初始化函数保留在构造函数的主体中。
稍微困难的解决方案:
答案 2 :(得分:0)
setCurrState
和setPrevState
并非正式初始化您的state
对象,它们只是在改变了它的“状态”(没有双关语意图)之后初始化。
如果你认为它们是语义初始化你的状态对象,那么你也可以通过将它们合并到状态的构造函数中来形式化它(它应该接收所需的状态并立即设置它们)。然后,您可以在初始化列表中初始化它。
答案 3 :(得分:0)
添加一个返回State
的函数:
State GiveMeAState() {
State state;
state.setCurrState(state.stateMenu);
state.setPrevState(state.getCurrState());
}
并在初始化列表中使用它:
Class::Class(int width, int height) :
width(width),
height(height),
state(GiveMeAState()) {
}