说,我有两个班级:
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的末尾接收处理过的数据,那么它也会很难看,我猜。有更好的选择吗?
答案 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;
};