Доступ к экземплярам класса из других экземпляров класса - PullRequest
0 голосов
/ 31 июля 2011

У меня есть 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.

Так что я понимаю, что мне нужно было бы передать класс C в качестве параметра при создании класса D следующим образом:

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 ]

1 голос
/ 31 июля 2011

Я не уверен, относится ли это к вашему языку 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) { }
};

Ключ в том, что можно иметь указатели и ссылки на неполные типы.Поскольку вам не нужны фактические взаимно вложенные элементы (которые в любом случае не имеют смысла), а только ссылки, вы можете легко иметь циклические ссылки, подобные этой.

0 голосов
/ 31 июля 2011

Либо вы можете добавить метод SetD к C, либо вам нужен C для создания D, а D для создания C, что невозможно заставить работать. Если не явный SetD, то передача D в качестве аргумента методам C, которым нужны методы D., может сработать.

...