构造函数初始化列表中的函数?

时间:2013-09-27 15:06:06

标签: c++ list constructor initialization initializer

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

4 个答案:

答案 0 :(得分:3)

在初始化列表中调用这些函数没有其他的优点和优势,至少在你的情况下是这样。

只需在构造函数体中调用它们即可。


重要提示:

您说stateClass的成员。所以在构造函数级别中,state尚未构造,然后单独构造它在某种程度上是没有意义的:

<击>

<击>
state.setCurrState(state.stateMenu);
state.setPrevState(state.getCurrState());

<击>

尝试为state的类写一个well构造函数,将curr / prev设置为初始状态。

答案 1 :(得分:0)

简单的解决方案:将初始化函数保留在构造函数的主体中。

稍微困难的解决方案:
 

  • 向State添加构造函数以从参数初始化它。  
  • 编写新函数,返回要传递给State的构造函数的值。

  • 答案 2 :(得分:0)

    setCurrStatesetPrevState并非正式初始化您的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()) {
    }