Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.33.87] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Имеем два класса: class C1 { public: ... Attach(C2* pC2) ... protected: C2* pC2; ... } class C2 { public: ... Attach(C1* pC1) ... protected: C1* pC1; ... } В определенный момент их необходимо связать т.е присвоить соответствующие указатели друг другу, через метода Attach(...). Так вот хочется понять, кто это должен детать: C1, C2 или кто-то другой. Ведь в функциях Attach(...) могут быть и другие действия, кроме как простое присвоение указателя. Я понимаю, что это в первую очередь зависит от конкретной задачи и разработчика, но все же если есть какие-нибудь общие рекомендации на этот счет поделитесь, плиз. А то я этого нигде не встречал. И еще, если у кого есть ссылочки по данномй проблеме, дайте, если не сложно. |
Сообщ.
#2
,
|
|
|
Я бы предложил (во избежании рекурсии и усложнения кода), что бы это делал "кто-то другой".
|
Сообщ.
#3
,
|
|
|
Например, сделать функцию
bool Bind(C1 * c1, C2 * c2); Прописать ее как friend в обоих классах, и пусть себе связывает на здоровье одно с другим. Особенно если у тебя экземпляры этих классов всегда будут связаны взаимно - так этот факт будет нагляднее. Хотя, конечно, все зависит от задачи. |
Сообщ.
#4
,
|
|
|
Цитата reporter @ 14.01.04, 01:26 Например, сделать функцию bool Bind(C1 * c1, C2 * c2); Прописать ее как friend в обоих классах, и пусть себе связывает на здоровье одно с другим. Особенно если у тебя экземпляры этих классов всегда будут связаны взаимно - так этот факт будет нагляднее. Хотя, конечно, все зависит от задачи. Я так понимаю данная функция (Bind(...)) будет всего лишь присваивать указатели. А если нужно чтобы при связывании происходили какие-то действия, например, создание резервных членов-данных для работы со связываемым классом. А при отвязывании, наоборот, удаление. Для такаго случая предложенная функция, IMHO, не подойдет. |
Сообщ.
#5
,
|
|
|
Если «какие-то действия, например, создание резервных членов-данных» будет нужно производить не только во время связывания классов, но и просто в ходе работы с ним, то, может имеет смысл вынести эти функции в отдельные методы класса? Тогда и Bind(...) могла бы их вызывать.
Сочиняю на ходу, потому что информации о том, что же ты хочешь в итоге получить, маловато :) |
Сообщ.
#6
,
|
|
|
обсуждение чисто идеологическое
у тебя что то типа несвязанной сети имеется а потом некоторые узлы связываются ? В любом случае у тебя эти объекты в неком контейнере содержатся, этот контейнер и должен их связывать IMHO. |