Oop 从其他类实例访问类实例
我有4门课:A、B、C和D A实际上是一个主类,有B、C和D的实例:Oop 从其他类实例访问类实例,oop,class,class-design,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 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_类还需要使用来自D_类的方法来更改D_类的状态。如果所有的东西都在一节课上,那就容易了
当然,我可以只使用接受特定类的方法,但必须有更好的方法。我确信我在设计中忽略了一些基本的东西。我不确定这是否适用于您的OO语言,但在中,您可以很容易地让
C_类
包含对D
的引用和D_类
对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) { }
};
关键是可以有指向不完整类型的指针和引用。由于您不需要实际的相互嵌套的成员(这无论如何都没有意义),而只需要引用,因此可以很容易地使用这样的循环引用。您可以向C添加一个SetD方法,或者您需要C来构造D,而D来构造C,这是不可能实现的。如果不是显式的SetD,那么将D作为参数传递给需要D的方法的C的方法可能会起作用。是的,传递一个引用会起作用-真的想避免这种情况。另一种方法是:让C通过将自身作为引用传递来创建D:
C:D=newd(this)
和D:constructor(C:C)
。