![]() |
|
![]() ![]() ![]() |
|
Zyxel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 29.4.2011 Репутация: нет Всего: нет |
Здравствуйте,
есть несколько вариантов базового класса. От какого именно наследоваться - определяется только по ходу выполнения программы. Это возможно реализовать? |
|||
|
||||
Веталька |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 2.11.2008 Репутация: нет Всего: 6 |
перезагрузка подойдет? -------------------- Ради зачета студент идет на все, даже на лекции........................ |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
пожалейте людей, которые будут поддерживать этот код...
-------------------- qqq |
|||
|
||||
Zyxel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 29.4.2011 Репутация: нет Всего: нет |
перегрузка????? |
|||
|
||||
Zyxel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 29.4.2011 Репутация: нет Всего: нет |
вопрос, возможно ли это реализовать, конечно подразумевает читабельный код без всяких подподвыподвертов) Так что? нельзя? Задача, вроде, типичная... прога работает с разными источниками видеоданных: аналог-е или сетевые видеокамеры, мм файлы на диске. нужно ввести, покадрово обработать, отобразить.Источник видеоданных выбирается и конфигурируется из диалога на этапе выполнения. Отсюда и проблема. Я хотела реализовать аппаратно-зависимую часть в виде нескольких классов ( для каждого источника изо - свой класс). И один производный класс VideoInput, который наследует аппаратно-зависимые методы от базового + содержит методы, поддерживающие интерфейс внутрипрограммных буферов. Мне кажется, это наиболее простой подход, но столкнулась с проблемой реализации. Конечно, можно запихнуть апп.зависимую часть и поддержку программного интерфейса в один класс и после выбора источника изо в диалоге создавать динамически new, но это уже будет класс, написанный только под данную задачу... Что посоветуете? |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
можно сделать один абстрактный класс, который описывает все аппаратно зависимые функции от него унаследовать несколько классов (по одному на каждый источник данных) а VideoInput не наследовать от них, а просто ему в конструкторе передавать объект одного из классов (в зависимости от выбранного источника данных) -------------------- qqq |
|||
|
||||
Zyxel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 29.4.2011 Репутация: нет Всего: нет |
тогда в конструкторе придется передавать НЕтипизованный указатель на объект и передавать переменную - тип объекта, взависимости от которой "типизовать" указатель в условном операторе. я правильно поняла? что-то типа: *.h class CVideoInput { public: // конструктор CVideoInput(VOID* pSourceClassX, int SourceType); // дестр ~CVideoInput (void); .............. //тип источника int m_SourceType; //указатель на объект класса Источник0 СSource0* m_pSource0; //указатель на объект класса Источник1 СSource1* m_pSource1; ..................... //указатель на объект класса ИсточникN СSourceN* m_pSourceN; ........ } *.cpp ......... CVideoInput : CVideoInput (void* pSourceClassX, int SourceType) { m_SourceType = SourceType; if (m_SourceType==0) m_pSource0 = (СSource0*)pSourceClassX; if (m_SourceType==1) m_pSource1 = (СSource1*)pSourceClassX; ............. } а каким из указателей пользоваться (m_pSource0...m_pSourceN) зависит от той же m_SourceType . Получается, везде таскаем "тяжелую" конструкцию с выбором ((( Это сообщение отредактировал(а) Zyxel - 30.4.2011, 14:26 |
|||
|
||||
maxim1000 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
уже есть механизм run-time полиморфизма - он именно подобные задачи и решает например, если от CSource0, CSource1, ... нам нужны только две операции - условно назовём их GetData1, GetData2, то делается такой класс:
от него наследуем CSource0, CSource1,... а в CVideoInput передаём указатель на CSourceInterface и вызываем его методы по мере необходимости выбор нужного метода будет делаться через механизм виртуальных функций - он именно для этого и придуман -------------------- qqq |
||||
|
|||||
Zyxel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 29.4.2011 Репутация: нет Всего: нет |
Ага, понятно! Спасибо
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |