类初始化序列

时间:2017-09-20 07:30:31

标签: c++ constructor

说,我有两个班级:

class A
{
  A(int address) : addr(address), B_instance(this);

  int addr;
  struct adata _adata;
  B B_instance;
}

class B
{
  B(A * _top) : top(_top) { };

  struct bdata _bdata;
  A * top;
}

现在我想向A :: A添加更多数据,以便将其写入成员结构并进一步分发到B :: B,但在A :: A中进行一些处理之后(!)。我怎样才能重写类来实现呢?

如果我这样做

A(int address, void * somedata) : addr(address)
{
  // Some data processing
  B_instance::B(this, newdata);
}

然后我必须为B编写默认构造函数,以便在主构造函数(丑陋)之前调用它。如果我成为B的成员,那只是在A :: A的末尾接收处理过的数据,那么它也会很难看,我猜。有更好的选择吗?

1 个答案:

答案 0 :(得分:1)

作为数据成员,B_instance将始终在进入构造函数体之前进行初始化。您可以添加(静态)成员函数以返回必要的数据,并在成员初始化列表中使用它。 e.g。

class A
{
private:
  static void* getNewData() { 
    // Some data processing 
    return ...;
  }
public:
  A(int address) : addr(address), B_instance(this, getNewData()) {}

  int addr;
  struct adata _adata;
  B B_instance;
};