![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
viii |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.7.2007 Репутация: нет Всего: нет |
вот что хотелось бы получить:
т.е. Bidirectional должен обладать методами Input и Output и добавлять свой метод ума не приложу, как тут можно поступить. не хотелось бы наследовать здесь TPin и реализовывать отдельно методы, существующие в TInpuPin и TOutputPin. возможно, лучше перенести все методы в TPin а в его потомках (TInputPin, TOutputPin и TBidirectionalPin) закрыть доступ к некоторым методам? только как это сделать? |
|||
|
||||
zim22 |
|
||||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
или через private наследование или через композицию. *** вот пример с private наследованием:
*** вот пример с композицией:
Это сообщение отредактировал(а) zim22 - 1.8.2009, 14:32 |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
судя по коду Вам вместо двойного наследования больше подойдет вариант с наследованием общей реализации:
Это сообщение отредактировал(а) mes - 1.8.2009, 16:16 |
|||
|
||||
viii |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.7.2007 Репутация: нет Всего: нет |
Нравится предпоследний вариант. Может все-таки можно как-то с двойным наследованием?
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
viii, виртуальное наследование (вариант от mes) это такой костыль, который очень часто показывает, что у тебя что-то не так запроектировано... Другими словами, в твоем случае не было необходимости делить на столько классов.
Нужно было сразу делать Bidirectional. Очень мало случаев, когда может понадобиться функционал, который ты реализуешь. Как вариант, можно сделать класс для низкоуровневой работы с портом (открыть/закрыть, читать/писать) и еще два, которые работают с этим классом, но вводят дополнительные высокоуровневые методы для чтения и записи соответственно. В этом случае действительно можно безболезненно объединить эти классы в один наследованием. Единственное, что в этом случае будет дублироваться - указатель на класс низкоуровневой работы, но сам объект будет общим. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |