Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Описание классов, ссылки друг на друга |
Автор: ecspertiza 14.11.2011, 12:28 |
Есть задача, описать два класса таким образом что бы у класс А была ссылка на класс Б и на оборот. Пробую сделать через шаблоны, следующим образом http://liveworkspace.org/code/3a9490c197e7552b387c9e86045610da но что то не выходит, оно и понятное дело тот класс что объявлен первым ничего не знает про второй. Как быть в такой ситуации ? Может есть какой то паттерн ? Добавлено через 6 минут и 59 секунд Совсем забыл про http://liveworkspace.org/code/c11d49465c05d66af6017107e3ce338e тему можно закрыть, спасибо |
Автор: newbee 14.11.2011, 12:41 | ||
Если бы речь шла именно о ссылках (а не указателях), можно было бы так:
|
Автор: ecspertiza 14.11.2011, 12:43 |
да, немного не так выразился, здесь хранение указателей, но за пример все равно спасибо ![]() |
Автор: boostcoder 14.11.2011, 13:02 |
не люблю я классы, которые "знают" друг о друге... самое время выявить общее, и вынести это общее в один базовый класс, который у будет предком для этих двух. Добавлено через 13 минут и 45 секунд ну или они будут ссылаться на этот общий объект. |
Автор: newbee 14.11.2011, 13:20 |
boostcoder, фу! Чрезмерное наследование, когда втупую выявляют общее, - это плохо! Это очень плохо! Композиция - вот это хорошо! |
Автор: boostcoder 14.11.2011, 14:35 |
я больше не буду |
Автор: ecspertiza 14.11.2011, 15:07 |
Просто нужно реализовать, взаимосвязь платформы и конфигурации. То есть платформа должна знать о поддерживаемых конфигурациях, а конфигурация о поддерживаемых платформах. Не придумал более правильного решения, но то что есть на мой взгляд, вполне подойдет. |
Автор: mes 14.11.2011, 16:34 |
и однажды бааа...бах ![]() |
Автор: newbee 14.11.2011, 16:47 |
В данном случае это просто борьба с языком. Но при неумелом пользовании, да, бабахнет )) |
Автор: newbee 14.11.2011, 17:03 |
Да нет, я вообще не против наследования как такового, и сама им пользуюсь. Но дело в том, что многие им слишком увлекаются, доходит до маразма: берем два объекта: палка и палец; безусловно им пресущи некоторые общие свойства, но значит ли это, что их нужно наследовать от общего (общих?) интерфейса? Не будем останавливатьяс на частных случаях вроде рисования, нам просто нужно описать эти объекты. |
Автор: baldina 14.11.2011, 17:05 |
э-э... ну если мы будем считать и палку и палец на прочность как балочную конструкцию, то почему нет ![]() шутка |
Автор: ecspertiza 14.11.2011, 17:12 |
Собственно назревает вопрос почему ? и как тогда в такой ситуации быть ? Ну это так для понимания, чтоб на грабли не наступить ![]() |
Автор: baldina 14.11.2011, 17:17 |
ecspertiza, в случае с указателями это нормально, ничего криминального. что бы сказать точнее, надо знать задачу |
Автор: ecspertiza 14.11.2011, 17:45 | ||
Хорошо, что статьи за это дело нету ![]() А задача следующая, необходимо софту обновления поставить, софт в лучшем случае состоит из двух частей, это платформа и конфигурация. При этом они связаны, то есть каждая платформа должна знать список поддерживаемых конфигураций, а каждая конфигурация список поддерживаемых платформ. Стало быть классы Config и Platform в моем случае описывают и одно и другое. Думаю в данном случае решение нормальное, один класс содержит список указателей на объекты другого. |
Автор: mes 14.11.2011, 18:55 |
просто непонятно, зачем вобще надо было вводить ненужные касты с этой константностью, которая к тому же повышает бабахонеустойчивость.. |
Автор: newbee 14.11.2011, 18:57 |
mes, для кого писала: борьба с языком ![]() Добавлено через 1 минуту и 22 секунды Я вообще думала, такое не прокатит, и обменять два объекта ссылками друг на друга не получится ![]() |
Автор: mes 14.11.2011, 19:36 | ||
это не борьба с языком, это баабах ![]() вот это как раз и бабахает.. ![]() если для создания каждого из объектов нужна ссылка на созданный экземпляр другого, то это даже логически непредставимо.. ![]() что впрочем не мешает одному создвать/хранить другой и инициализировать его ссылкой на себя.. Добавлено @ 19:38
и не получилось.. на самом деле хранимая ссылка не валидна и она как раз и является причиной упомянотой уже не раз неприятной ситуации с вынужденной дальнейшей отладкой.. |
Автор: newbee 14.11.2011, 20:23 |
mes, возможно ты прав. Перед ответом посмотрела выхлоп valgrind, он проблем не нашел. Может быть, потому что все на стеке main-а... |
Автор: mes 14.11.2011, 21:35 |
http://liveworkspace.org/code/58a595f00af4226b8725967ab86409c2 |
Автор: baldina 14.11.2011, 23:09 | ||
значит все ок |
Автор: newbee 14.11.2011, 23:30 |
mes, ок, я дала дурацкий совет ![]() |
Автор: Lols 15.11.2011, 03:30 |
А чем, все-таки, не понравился ответ автора поста? ![]() |
Автор: baldina 15.11.2011, 15:31 |
![]() |
Автор: cupper 28.11.2011, 11:23 | ||
А вы уверены что вам нужен велосипед который умеет одинаково хорошо ездить как вперед так и назад ? Может быть стоит сделать одну сущность главной а вторую придаточной ? |