Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тонкости наследования 
:(
    Опции темы
Zyxel
Дата 29.4.2011, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2011

Репутация: нет
Всего: нет



Здравствуйте,
есть несколько вариантов базового класса. От какого именно наследоваться  - определяется только по ходу выполнения программы.
Это возможно реализовать?
PM MAIL   Вверх
Веталька
Дата 30.4.2011, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 2.11.2008

Репутация: нет
Всего: 6



Цитата

Здравствуйте,
есть несколько вариантов базового класса. От какого именно наследоваться  - определяется только по ходу выполнения программы.
Это возможно реализовать?

перезагрузка подойдет?


--------------------
Ради зачета студент идет на все, даже на лекции........................ 
PM MAIL ICQ   Вверх
maxim1000
Дата 30.4.2011, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 1
Всего: 110



пожалейте людей, которые будут поддерживать этот код...


--------------------
qqq
PM WWW   Вверх
Zyxel
Дата 30.4.2011, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2011

Репутация: нет
Всего: нет



Цитата(Веталька @ 30.4.2011,  00:56)
перезагрузка подойдет?

перегрузка?????
PM MAIL   Вверх
Zyxel
Дата 30.4.2011, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2011

Репутация: нет
Всего: нет



Цитата(maxim1000 @ 30.4.2011,  09:43)
пожалейте людей, которые будут поддерживать этот код...

вопрос,  возможно ли это реализовать, конечно подразумевает  читабельный код 
без всяких подподвыподвертов)
 
Так что? нельзя?  
Задача, вроде, типичная... прога работает с разными источниками видеоданных: аналог-е или сетевые видеокамеры, мм файлы на диске. нужно ввести, покадрово обработать, отобразить.Источник видеоданных выбирается и конфигурируется из диалога на этапе выполнения. Отсюда и проблема.
Я хотела реализовать аппаратно-зависимую часть в виде нескольких классов ( для каждого источника изо - свой класс). И один производный класс VideoInput, который наследует аппаратно-зависимые методы от базового + содержит методы, поддерживающие интерфейс внутрипрограммных буферов. 
Мне кажется, это наиболее простой подход, но столкнулась с проблемой реализации.

Конечно, можно запихнуть апп.зависимую часть и поддержку программного интерфейса в  один класс и после выбора источника изо в диалоге создавать динамически new, но это уже будет класс, написанный только под данную задачу...

Что посоветуете?
PM MAIL   Вверх
maxim1000
Дата 30.4.2011, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 1
Всего: 110



Цитата(Zyxel @  30.4.2011,  11:28 Найти цитируемый пост)
Я хотела реализовать аппаратно-зависимую часть в виде нескольких классов ( для каждого источника изо - свой класс). И один производный класс VideoInput, который наследует аппаратно-зависимые методы от базового + содержит методы, поддерживающие интерфейс внутрипрограммных буферов.


можно сделать один абстрактный класс, который описывает все аппаратно зависимые функции
от него унаследовать несколько классов (по одному на каждый источник данных)

а VideoInput не наследовать от них, а просто ему в конструкторе передавать объект одного из классов (в зависимости от выбранного источника данных)



--------------------
qqq
PM WWW   Вверх
Zyxel
Дата 30.4.2011, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2011

Репутация: нет
Всего: нет



Цитата(maxim1000 @ 30.4.2011,  12:56)
а VideoInput не наследовать от них, а просто ему в конструкторе передавать объект одного из классов (в зависимости от выбранного источника данных)

тогда в конструкторе придется передавать НЕтипизованный указатель на объект  и передавать переменную - тип объекта,
взависимости от которой "типизовать" указатель в условном операторе.
я правильно поняла? что-то типа:

*.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
PM MAIL   Вверх
maxim1000
Дата 30.4.2011, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 1
Всего: 110



Цитата(Zyxel @  30.4.2011,  14:19 Найти цитируемый пост)
тогда в конструкторе придется передавать НЕтипизованный указатель на объект  и передавать переменную - тип объекта,

уже есть механизм run-time полиморфизма - он именно подобные задачи и решает

например, если от CSource0, CSource1, ... нам нужны только две операции - условно назовём их GetData1, GetData2, то делается такой класс:
Код

class CSourceInterface
{
public:
    virtual int GetData1()=0;
    virtual double GetData2()=0;
};

от него наследуем CSource0, CSource1,...

а в CVideoInput передаём указатель на CSourceInterface и вызываем его методы по мере необходимости

выбор нужного метода будет делаться через механизм виртуальных функций - он именно для этого и придуман


--------------------
qqq
PM WWW   Вверх
Zyxel
Дата 2.5.2011, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2011

Репутация: нет
Всего: нет



Ага, понятно! Спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0735 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.