![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Anton Vatchenko |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Итак, есть некий базовый класс:
От него идет целая иерархия классов, типа:
То есть имеем допустим миллион экземпляров "машин" (Car), при этом известно что у всех у них одинаковый функционал, но у каждой свой радиус колес, мощность, выносливость. Нет смысла для каждого экземпляра определять отдельно все эти данные, потому как известно, что среди этого миллиона машин всего 20 характерных типов (Волга, Мерс, БМВ и т.п.) Как данное реализовать, только без создания 20 разных классов, ну кроме указателя на std:map свойств - необходимо делать быстрое чтение этих данных. Это сообщение отредактировал(а) Anton Vatchenko - 2.9.2010, 15:37 |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Радиусом колес, мощностью. Ну всеми свойствами авто. Но 10 волг между собой отличаются только позицией, ну и текущей скоростью. Радиус, мощность у них одна. Ну и функционал у всех машин один.
Это сообщение отредактировал(а) Anton Vatchenko - 2.9.2010, 15:46 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
милльен вариантов. Все зависит от решаемой задачи. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Очень хотелось бы хоть один, с минимальным количеством подводных камней (кастинг, map свойств и т.п.)
То есть имеем 5 волг, 10 бмв, 3 мерса. Все они имеют разные позиции, но у всех волг один радиус колес, у всех бмв - другой, у всех мерсов - третий. Ну и у всех у них один функционал, просто однажды вызывается типа createWheels(m_typeRadius). Это сообщение отредактировал(а) Anton Vatchenko - 2.9.2010, 15:49 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если только этим, то не зачем плодить дополнительные классы. достаточно сделать несколько _инициализаторов_ приводящих объект Car в нужное состояние. Добавлено через 48 секунд
задачу в студию |
|||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
ну в принципе задача и так описана - есть иерархия классов, экземпляры могут иметь как конкретные свойства (типа позиция, текущий уровень топлива, поворот колес), так и общие (радиус колес, мощность). У всех машин одного типа эти общие свойства и есть общие.
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Это самый простой способ, полностью реализованный на одной лишь объектной модели С++. В принципе можно волгу наследовать от интерфейса кар, а волгу-3110 только от волги, но первый вариант мне кажется более гибким. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Если учесть, что марок машин 20, у каждой по 10-20 моделей, то программирование класса для каждой займет месяц. Это сообщение отредактировал(а) Anton Vatchenko - 2.9.2010, 15:56 |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
лови и пили :
|
||||
|
|||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
А что делать с производными классами? Вот к примеру от Car порождены Car3Wheel, Car4Wheel, у которых могут быть еще свои свойства, частично функционал из Car, а частично из себя?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
добавьте в дескриптор поле, о том сколько колес. Более полно решить задачу не зная задачи, проблематично.. Первоначально надо представить что есть автомибиль и какие задачи он должен решать. Т.е. автомобиль с точки зрения завода, его производящего, такси-фирмы, и простого пользователя , абсолютно различны и отражать все это в одной модели не имеет смысла |
|||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
то есть может получиться типа
которые "увеличат" размер класса, так как в Car будет как бы дважды m_data. Добавлено через 40 секунд Задача дана в первом посте, полностью. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |