Перекрестные указатели
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
самый простой способ объявить void указатели а в нужных операциях приводить их к тому что надо (чем ты их проинициализировал)
В SAD - все в SAD.
В файле A.h пишешь:
В файле B.h пишешь:
В файле A.cpp пишешь:
В файле B.cpp пишешь:
Код: Выделить всё
class B;
class A
{
public:
A();
virtual ~A();
B* m_pB;
};
Код: Выделить всё
class A;
class B
{
public:
B();
virtual ~B();
A* m_pA;
};
Код: Выделить всё
#include "A.h"
#include "B.h"
A::A()
{
m_pB = new B();
}
A::~A()
{
delete m_pB;
}
Код: Выделить всё
#include "B.h"
#include "A.h"
B::B()
{
m_pA = new A();
}
B::~B()
{
delete m_pA;
}
2 WinMain...
И после этого смотришь как программа в цикле выделяет память до тех пор пока она не кончится, после этого программа аварийно завершается, так как при выделении памяти не обрабатывается ситуация, когда выделение памяти невозможно.
И после этого смотришь как программа в цикле выделяет память до тех пор пока она не кончится, после этого программа аварийно завершается, так как при выделении памяти не обрабатывается ситуация, когда выделение памяти невозможно.
Это я написал лишь для примера, чтобы показать, как обращаться к перекрёстным указателям. А никто не заставляет весь код повторять точь в точь.
-
- Сообщения: 19
- Зарегистрирован: 10 мар 2005, 20:52
- Откуда: Ужгород, Украина
- Контактная информация:
ссылки же можно только в конструкторе инициализировать - тоесть, пока одного объекта нету, то другой не может быть создан и наоборот. а мне надо в результате чтобы объекты этих двух классов могли меняться данными - один объект использует данные другого объекта, используя ссылку (или указатель), которую я ему назначил, так же нужно, чтобы если что, я мог поменять этот объект на другой.
Почему только в конструкторе? Можно и потом проинициализировать. Важно лишь, чтобы указатель на объект был проинициализирован до того, как к нему обратились.
вообще то так не делается . у тебя в архитектуре проблема.а мне надо в результате чтобы объекты этих двух классов могли меняться данными - один объект использует данные другого объекта, используя ссылку (или указатель), которую я ему назначил, так же нужно, чтобы если что, я мог поменять этот объект на другой.
но если очень хочется (нужно) то смотри в платформ специфик вещи. в МС реализации есть понятие интерфейсов (по аналогии с явой насколько я помню)
как вариант возможно прокатит такая вещь, как создание двух родительских классов ParentA ParentB и указание их вместо конкретных твоих A B
В SAD - все в SAD.
Такой вариант ещё больше затруднит решение задачи.как вариант возможно прокатит такая вещь, как создание двух родительских классов ParentA ParentB и указание их вместо конкретных твоих A B
Лучше уж обмен данными и сообщениями через некий промежуточный класс, типа как в архитектуре "документ/вид". Сами данные находятся в одном общем классе документа, а их ввод и отображение может быть распределено между несколькими другими классами вида.
При этом каждый класс вида образован от единого базового класса и класс документа обращается к классам вида через интерфейс базового класса. Каждый класс вида имеет доступ к данным документа и при их изменении может вызывать команду на обновление других видов.