2011-07-30 185 views
0

我有4類:A,B,C和D.訪問類實例

A是一個真正的主類,並具有B的情況下,C和d:

class A() { 

    var B_class : B = new B() 
    var C_class : C = new C() 
    var D_class : D = new D() 

} 

D類具有使用C類中的方法的方法。但是這些方法需要知道C類的狀態。

所以我的理解是構建時,d類,像這樣我就需要通過C級作爲一個參數:

class A() { 

    var B_class : B = new B() 
    var C_class : C = new C() 
    var D_class : D = new D(C_class) 

} 

但另一個問題是,C_class還需要使用從D_class中的方法改變D_class的狀態。如果一切都在一個班級,它會很容易。

當然,我可能只有具有特定類的方法,但必須有更好的方法。我相信我忽視了我設計中的一些基本內容。

回答

1

我不知道這是否適用於你的面向對象的語言,但你可以輕鬆擁有C_class包含一個參考DD_class一個參考C

class C; 
class D; 

class C 
{ 
    D & otherD; 

public: 
    C(D & d) : otherD(d) { } 
}; 

class D 
{ 
    C & otherC; 

public: 
    D(C & c) : otherC(c) { } 
}; 

class A 
{ 
    C myC; 
    D myD; 

public: 
    A() : myC(myD), myD(myC) { } 
}; 

的關鍵是,它可能有指針和引用不完整的類型。既然你不需要實際的相互嵌套的成員(無論如何都沒有意義),但是隻有引用,你可以很容易地得到像這樣的循環引用。

0

要麼你可以添加一個SetD方法到C,或者你需要C來構造D和D來構造C,這是不可能工作的。如果不是明確的SetD,那麼將D作爲參數傳遞給需要D方法的C方法可能會解決。

+0

是的,通過一個參考將工作 - 真的想避免這一點。 –

+0

另一種方法是:讓C通過傳遞自己作爲參考來創建D:'C:d = new D(this)'和'D:constructor(c:C)'。 –