![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
ну я просто пример привел, может и не Car от Bicycle, а Car и Bicycle от Transport.
как обойти проблему увеличения класса? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
желательно ее не создавать если транспорт является общим интерфейсом, то он никаких дескрипторов не хранит и поэтому проблемы наследоваться всем от транспорта нет. но если все ж надо наследоваться от наследника, то каст спасет мир |
|||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
А можно как-то и без каста и без увеличения размера класса? Если класс Transport реализует общий для дочерних классов функционал? При этом как Car и Bicycle наследуется от Transport, так и CarDescriptor и BicycleDescriptor наследуется от TransportDescriptor.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Ну а если у дескриптора транспорта есть общее свойство типа мощность, транспорт в функционале использует это свойство, эти же свойства определены у велосипеда и автомобиля, но еще добавлено множество других...
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
ну это и есть основная проблема - как ее решить?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не вижу проблемы, нельзя ли поподробней ? |
|||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Вроде уже все много раз описал. При решении, которое мне указали вы, есть иерархия инстансов, и есть иерархия дескрипторов, при этом инстанс указывает на конкретный дескриптор. Как работать с конкретным дескриптором без увеличения размера класса, а также без кастинга?
Это сообщение отредактировал(а) Anton Vatchenko - 3.9.2010, 12:41 |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
так не бывает, чтоб все удовольствие в одном флаконе. кастинг в Вашем случае не страшный, так как конструктор позволяет проинициализировать ссылку только тем типом, к которому Вам впоследсвии надо будет кастить. ну а выглядит примерно так :
использовал структуры чтоб не писать приват и паблик, а также специально _забыл_ про константность ссылки. |
||||
|
|||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
mes, выглядит неплохо, но надо помнить что Descriptor не должен быть временным (локальным) объектом. IMHO, лучше "шарить" через shared_ptr.
Это сообщение отредактировал(а) Леопольд - 3.9.2010, 15:26 -------------------- вопросов больше чем ответов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Это я скорее для Anton Vatchenko отметил...
-------------------- вопросов больше чем ответов |
|||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Спасибо, видимо действительно иначе никак... Значит будем кастить...
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |