2012-08-12 16 views
0

我需要兩個形成循環的類,它們都有自己的成員,但還有其他類的副本,讓我們考慮一下這個示例。在C++中循環類,如何使用它們的構造函數

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 L in main();我想它的所有變量初始化爲零(對於默認構造函數),但我不現在如何處理這些構造函數的循環,因此得到的內部發起

+3

這種佈局在C++中是不可能的。 L或U中的至少一個必須是指針或引用。 – kennytm 2012-08-12 20:34:51

+0

好的,你可以隨意修改這個例子。可以使用指針,但我只需要當我用零初始化它的下邊也得到零。 – netsmertia 2012-08-12 20:38:51

+0

如果你已經有較低的鞋幫,你爲什麼還需要一個較低的鞋幫實例? – Gir 2012-08-12 20:44:31

回答

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; 
} 

雖然你需要添加desctructors清理的指針,在適當或刪除上 低?

此外,您應該調查您的數據結構,看看您是否可以擺脫循環依賴 - 這可能會在將來導致您的問題。

+0

或者你可以避免混亂,只是有一個較低的內部鞋面常規實例? – Gir 2012-08-12 20:51:25

+0

謝謝。我會嘗試去除循環依賴,但我認爲這種情況非常普遍。 – netsmertia 2012-08-12 21:17:08

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) 
    { 
    } 
}; 

這段代碼有很多問題,但希望它能回答你的問題。

+0

是不是一個無限循環? – Gir 2012-08-12 20:45:38

+0

@Gir oops,你是對的。 – jahhaj 2012-08-12 20:46:36

+0

不知道誰投了我的答案,這是垃圾。如果可以的話,我會刪除它。 – jahhaj 2012-08-12 20:49:00

相關問題