从其他类实例访问类实例

时间:2011-07-30 23:37:17

标签: oop class class-design

我有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的状态。如果一切都在一堂课中,那就很容易了。

当然,我可以拥有采用特定类的方法,但必须有更好的方法。我有信心我忽略了设计中的一些基本内容。

2 个答案:

答案 0 :(得分:1)

我不确定这是否适用于您的OO语言,但您可以轻松地C_class包含对D的引用和D_classC的引用:

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方法可能会有效。