0

我需要两个形成循环的班级,都有自己的成员,但还有其他班级的副本,让我们考虑这个例子。

class lower; 
class upper{
    int uA;
    lower L;
    upper(){
    uA=0;   
    //how to initialize lower here using lower's constructor 
    }
};

class lower{
    int lA;
    upper U;
    lower(){
    lA=0; 
    //how to initialize upper here using upper's constructor 
   }

};

现在我需要upper Lmain() 中的上部对象;我希望它的所有变量都初始化为零(对于默认构造函数),但我现在不知道如何处理这些构造函数的循环,所以lower L在上部 初始化

4

2 回答 2

2

你可以使用这样的东西:

class upper;
class lower{
    friend class upper;
    int lA;
    upper* U;
    void setUpper(upper* u)
    {
        U = u;
    }
    public:

    lower(){
    lA=0; 
    U = 0; 
   }
};

class upper{
    int uA;
    lower* L;
    public:
    upper(lower* l){
    uA=0;   
    L = l;
    l->setUpper(this); 
    }
};

int main()
{
    lower* l = new lower();
    upper* u = new upper(l);
    return 0;
}

虽然需要添加析构函数来清理指针,但还是酌情从上层删除下层?

此外,您应该调查您的数据结构,看看是否可以摆脱循环依赖——这可能会在未来给您带来问题。

于 2012-08-12T20:50:09.763 回答
1

像这样,(正如 KennyTM 所说你需要使用指针)

class lower; 

class upper
{
    int uA;
    lower* L;
    upper() : uA(0), L(new L)
    {
    }
};

class lower
{
    int lA;
    upper* U;
    lower() : lA(0), U(new U)
    {
    }
};

这段代码有很多问题,但希望它能回答你的问题。

于 2012-08-12T20:44:44.003 回答