我有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的状态。如果一切都在一堂课中,那就很容易了。
当然,我可以拥有采用特定类的方法,但必须有更好的方法。我有信心我忽略了设计中的一些基本内容。
答案 0 :(得分:1)
我不确定这是否适用于您的OO语言,但您可以轻松地C_class
包含对D
的引用和D_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) { }
};
关键是可以有指针和对不完整类型的引用。既然你不需要实际的相互嵌套的成员(无论如何都没有意义),但只有引用,你可以很容易地得到像这样的循环引用。
答案 1 :(得分:0)
要么你可以为C添加一个SetD方法,要么你需要C来构造D和D来构造C,这是不可能的。如果不是显式的SetD,那么将D作为参数传递给需要D方法的C方法可能会有效。