![]() |
Модераторы: 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 в моем случае описывают и одно и другое. Думаю в данном случае решение нормальное, один класс содержит список указателей на объекты другого. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |