【问题标题】:Accessing class instances from other class instances从其他类实例访问类实例
【发布时间】:2011-07-31 07:50:57
【问题描述】:

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

当然,我可以只使用带有特定类的方法,但必须有更好的方法。我确信我在设计中忽略了一些基本的东西。

【问题讨论】:

    标签: oop class class-design


    【解决方案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) { }
    };
    

    关键是可以有指向不完整类型的指针和引用。由于您不需要实际的相互嵌套的成员(无论如何这都没有意义),而只需要引用,因此您可以轻松地拥有这样的循环引用。

    【讨论】:

      【解决方案2】:

      要么你可以给C添加一个SetD方法,要么你需要C来构造D和D来构造C,这是不可能的。如果不是显式 SetD,则将 D 作为参数传递给需要 D 方法的 C 方法可能会奏效。

      【讨论】:

      • 是的,传递引用会起作用 - 真的很想避免这种情况。
      • 另一种方法是:让 C 通过将自身作为引用传递来创建 D:C: d = new D(this)D: constructor(c : C)
      猜你喜欢
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2021-11-07
      • 2015-10-12
      相关资源
      最近更新 更多