Специфический случай объявления классов

Тема в разделе "WASM.WIN32", создана пользователем WishMaster, 13 ноя 2006.

  1. WishMaster

    WishMaster New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    54
    Адрес:
    Ukraine
    Есть два класса - А и Б. Каждому экземпляру класса А отвечает конкретный экземпляр класса Б и наоборот. Для обеспечения такого однозначного соответствия между классами удобно было бы включить в качестве элемента класса А ссылку на экземпляр класса Б и наоборот. Вопрос в том, как это правильно объявить? Поскольку если сначала объявлять класс А, например, то компилятор не узнает ссылку на класс Б, которая является его элементом. Как быть?
    Заранее благодарен за советы.
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ссылку нельзя. Указатель - можно.
    Код (Text):
    1. class B;
    2. class A{
    3.  B* b;
    4. public:
    5.   A(B* pb): b(pb)
    6.   {
    7.      b->setA(this);
    8.   }
    9. };
    10.  
    11. class B{
    12.   A* a;
    13. public:
    14.   B(): a(NULL)
    15.   {}
    16.   void setA(A* a) {
    17.     this->a = a;
    18.   }
    19. };
     
  3. TheRawGod

    TheRawGod New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    71
    Общевойсковая теория проектирования ПО гласит, что подобные "кольцевые" зависимости - вне устава:)
    В случае подобных зависимостей на уровне классов все не так плачевно, но чем на более высоком уровне архитектуры они появляются, тем это все более и более чревато неприятностями.