![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
Есть задача, описать два класса таким образом что бы у класс А была ссылка на класс Б и на оборот. Пробую сделать через шаблоны, следующим образом
http://liveworkspace.org/code/3a9490c197e7...87c9e86045610da но что то не выходит, оно и понятное дело тот класс что объявлен первым ничего не знает про второй. Как быть в такой ситуации ? Может есть какой то паттерн ? Добавлено через 6 минут и 59 секунд Совсем забыл про http://liveworkspace.org/code/c11d49465c05...6017107e3ce338e тему можно закрыть, спасибо Это сообщение отредактировал(а) ecspertiza - 14.11.2011, 12:29 |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Если бы речь шла именно о ссылках (а не указателях), можно было бы так:
-------------------- You're face to face With man who sold the world |
|||
|
||||
ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
да, немного не так выразился, здесь хранение указателей, но за пример все равно спасибо
![]() |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не люблю я классы, которые "знают" друг о друге... самое время выявить общее, и вынести это общее в один базовый класс, который у будет предком для этих двух.
Добавлено через 13 минут и 45 секунд ну или они будут ссылаться на этот общий объект. |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
boostcoder, фу! Чрезмерное наследование, когда втупую выявляют общее, - это плохо! Это очень плохо! Композиция - вот это хорошо!
-------------------- You're face to face With man who sold the world |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
я больше не буду
|
|||
|
||||
ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
Просто нужно реализовать, взаимосвязь платформы и конфигурации. То есть платформа должна знать о поддерживаемых конфигурациях, а конфигурация о поддерживаемых платформах. Не придумал более правильного решения, но то что есть на мой взгляд, вполне подойдет.
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
и однажды бааа...бах ![]() Это сообщение отредактировал(а) mes - 14.11.2011, 16:34 |
|||
|
||||
baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
дело то не в этом, просто второй класс использовался без шаблона
но как только это начнешь поправлять, появится другая проблема: получается рекурсивное определение класса, размер объекта равен бесконечности. в случае шаблонов потребуется бесконечно рекурсивный шаблон, что тоже невозможно http://liveworkspace.org/code/f57f9489dce3...ea9cb4dfeb96144 ![]() Добавлено через 4 минуты и 21 секунду
newbee, Ваша позиция ясна и уважаема. Но что Вы скажете про закрытое наследование? ведь это сугубо технический приём, в т.ч. когда "втупую выявляют общее" |
||||||
|
|||||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
В данном случае это просто борьба с языком. Но при неумелом пользовании, да, бабахнет ))
-------------------- You're face to face With man who sold the world |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Да нет, я вообще не против наследования как такового, и сама им пользуюсь. Но дело в том, что многие им слишком увлекаются, доходит до маразма: берем два объекта: палка и палец; безусловно им пресущи некоторые общие свойства, но значит ли это, что их нужно наследовать от общего (общих?) интерфейса? Не будем останавливатьяс на частных случаях вроде рисования, нам просто нужно описать эти объекты.
-------------------- You're face to face With man who sold the world |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
э-э... ну если мы будем считать и палку и палец на прочность как балочную конструкцию, то почему нет
![]() шутка |
|||
|
||||
ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
Собственно назревает вопрос почему ? и как тогда в такой ситуации быть ? Ну это так для понимания, чтоб на грабли не наступить ![]() Это сообщение отредактировал(а) ecspertiza - 14.11.2011, 17:12 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
ecspertiza, в случае с указателями это нормально, ничего криминального. что бы сказать точнее, надо знать задачу
|
|||
|
||||
ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 1 Всего: 5 |
Хорошо, что статьи за это дело нету ![]() А задача следующая, необходимо софту обновления поставить, софт в лучшем случае состоит из двух частей, это платформа и конфигурация. При этом они связаны, то есть каждая платформа должна знать список поддерживаемых конфигураций, а каждая конфигурация список поддерживаемых платформ. Стало быть классы Config и Platform в моем случае описывают и одно и другое. Думаю в данном случае решение нормальное, один класс содержит список указателей на объекты другого. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
просто непонятно, зачем вобще надо было вводить ненужные касты с этой константностью, которая к тому же повышает бабахонеустойчивость.. |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
mes, для кого писала: борьба с языком
![]() Добавлено через 1 минуту и 22 секунды Я вообще думала, такое не прокатит, и обменять два объекта ссылками друг на друга не получится ![]() -------------------- You're face to face With man who sold the world |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
это не борьба с языком, это баабах ![]() вот это как раз и бабахает.. ![]() если для создания каждого из объектов нужна ссылка на созданный экземпляр другого, то это даже логически непредставимо.. ![]() что впрочем не мешает одному создвать/хранить другой и инициализировать его ссылкой на себя.. Добавлено @ 19:38
и не получилось.. на самом деле хранимая ссылка не валидна и она как раз и является причиной упомянотой уже не раз неприятной ситуации с вынужденной дальнейшей отладкой.. Это сообщение отредактировал(а) mes - 14.11.2011, 19:38 |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
mes, возможно ты прав. Перед ответом посмотрела выхлоп valgrind, он проблем не нашел. Может быть, потому что все на стеке main-а...
-------------------- You're face to face With man who sold the world |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
mes, ок, я дала дурацкий совет
![]() -------------------- You're face to face With man who sold the world |
|||
|
||||
Lols |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 21.10.2011 Репутация: нет Всего: нет |
А чем, все-таки, не понравился ответ автора поста?
![]() |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
![]() |
|||
|
||||
cupper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
А вы уверены что вам нужен велосипед который умеет одинаково хорошо ездить как вперед так и назад ? Может быть стоит сделать одну сущность главной а вторую придаточной ? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |