Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стратегический вопрос. 
:(
    Опции темы
Royan
Дата 1.4.2004, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


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

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



У меня в прорамме планируется быть осциллограф. Будет сниматься аудио сигнал и выводиться на маленький нарисованный мной экранчик. Вопрос:

Как наболее грамотно сделать поледовательную прорисовку элементов.

1) Запихать все функции выводящие графическую информацию в одну процедуру вызываемую при сообщении WM_PAINT

или

2)У меня уже есть класс "оболочка" В нем можно ассоциировать какой-то член класса (например виртуальную функцию) с конкретным сообщением, так вот можно ли вызывав например такую виртуалную функцию унаследованного класса, вызвать еще и ее бызовую копию. Например:
Код
class Base{
 virtual int foo(){

  //Выводим рамку
 }
};
class Der: public Base{

int foo(){
  //Выводим содержание
}

};


Это надо для того чтобы можно было построить иерархию классов, и каждый из них добавил бы свою функцию обработки WM_PAINT, как следствие программа была бы логически построена и хорошо инкапсулирована.



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Масяня
Дата 1.4.2004, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

.... так вот можно ли вызывав например такую виртуалную функцию унаследованного класса, вызвать еще и ее бызовую копию...


Конечно, можно! Для отключения виртуального механизма вызова вирт. функций используй оператор разрешения обасти видимости. Например, так Base::foo().

Это сообщение отредактировал(а) Масяня - 1.4.2004, 18:35
PM MAIL   Вверх
Гость_Tinto
Дата 1.4.2004, 19:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не знаю как вы делаете, а я сделал так. Данные приходят пакетами через СОМ-порт с периодом 120мс. Пакет обрабатывается и выводится на экран(TeeChart) и все. Единственно узкое место здесь, это лимит времени на обработку данных не более 120мс. Аналогично можно вводить данные и со звуковухи, только надо программный буфер предусмотреть, т.к данные со звуковухи идут непрерывно. А вообше-то зачем заморачиваться, если есть готовая программа, SpectraLab называется baaa.gif
  Вверх
cardinal
Дата 1.4.2004, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Модератор: Название темы должно отражать ее суть!


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Royan
Дата 1.4.2004, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


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

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



2Cardinal, раз модератор да еще такой умный, то и предложи, а то вишь замечания тут радзовать
2МасяняBase::foo() вызовет только foo() из Base, а мне надо так чтобы одним вызовом foo() где либо вызвались все foo в иерархии классов, подобно тому как вызываются конструторы.
2TintoПотому как здесь есть учебный проект и его надо сделать. Суть примерно такова: сделать из звуковухи модем, то есть модулировать входящий сигнал и превращать в цифры.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
srd
Дата 1.4.2004, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


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

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



Royan
Так можно вызовы цепочкой организовать
Код

class A {
   virtual void f(void) {
        // ...
   }
};
class B : public A {
   void f(void) {
           A::f();
           // ....
    }
};
class C: public B {
     void f(void) {
            B::f();
              //...
       }
};





--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Royan
Дата 1.4.2004, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


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

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



Это я понимаю smile.gif Видимо другого способа и нет. Просто мой первоначальной идеей было написать таким образом чтобы избежать всяких A::f(); и B::f();



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
cardinal
Дата 1.4.2004, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Цитата
2Cardinal, раз модератор да еще такой умный, то и предложи, а то вишь замечания тут радзовать

В правилах написано:
Цитата
1) Заголовок сообщения должен кратко отражать суть проблемы, нельзя давать заголовки типа "Помогите", "Срочно нужна помощь", "Есть вопрос", "Очень надо", "Сложный вопрос по программированию" и тому подобное.

Моя задача, как и всех других модераторов, делать замечания участникам форума, если они не придерживаются правил.
Цитата
2Cardinal, раз модератор да еще такой умный

И не надо наезжать на модераторов. Они следят за порядком на форуме.

Цитата
Это надо для того чтобы можно было построить иерархию классов, и каждый из них добавил бы свою функцию обработки WM_PAINT, как следствие программа была бы логически построена и хорошо инкапсулирована.

Ну а если хочешь мое мнение услышать:
для начала надо решить критический это момент или нет
1. если да, то тут, наверно, не до инкапсуляции. Тут речь пойдет (как я понял) об изображении сигналов, так что надо подзадуматься, как бы не напридумывать так, чтобы потом изображение дергалось.
2. если нет, то надо делать так, как удобней тебе (ничего лучшего чем то, что предложил srd предложить не могу).


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Royan
Дата 2.4.2004, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


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

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



Цитата
И не надо наезжать на модераторов. Они следят за порядком на форуме.

Не умничай biggrin.gif
Цитата
1. если да, то тут, наверно, не до инкапсуляции. Тут речь пойдет (как я понял) об изображении сигналов, так что надо подзадуматься, как бы не напридумывать так, чтобы потом изображение дергалось.

Кстати отличный вопрос, если кто сталкивался с этим, как решали эту проблему?


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Royan
Дата 2.4.2004, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


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

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





--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
mr.DUDA
Дата 2.4.2004, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Royan, а можно упростить себе жизнь вот так wink.gif:
Код
#define BASE(class_name) public: class_name* Base() {return (class_name*)this;}

class A
{
public:
virtual int some(int) {}
virtual void foo() {}
};


class B: public A
{
BASE(A)

virtual void foo() {Base()->foo();}
virtual int some(int val) {Base()->some(val);}
};


class C: public B
{
BASE(B)

virtual void foo() {Base()->foo();}
};

Использование макросов в данном случае даёт более унифицированный внешний вид кода, чем при явном указании имён базовых классов (никаких других выигрышей и проигрышей тут нету, т.к. функция Base() будет inline, т.е. подставляемая, и к тому же кроме cast-а ничего не содержит). Сравни с тем же примером, но без Base():
Код
class A
{
virtual int some(int) {/* ... */}
virtual void foo() {/* ... */}
};


class B: public A
{
virtual void foo() {A::foo(); /* ... */}
virtual int some(int val) {A::some(val); /* ... */}
};


class C: public B
{
virtual void foo() {B::foo(); /* ... */ }
};

не надо загоняться на имена базовых классов, а достаточно вызвать Base( )...


--------------------
user posted image
PM MAIL WWW   Вверх
Royan
Дата 3.4.2004, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


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

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



Да ты прав, я думал предложить свой вариант, когда на этапе компиляции составляется карта в конструкторе каждого из унаследованных классов, а после ее в бызовом классе раскрутить в цикле, так как OnMyPaint базового класса вызывается по умолчанию, но потом до меня дошло, что это все равно то же самое, что предложил и ты, покуда пришлось бы прописывать в каждом конструкторе лишнюю строчку кода smile.gif

Это сообщение отредактировал(а) Royan - 3.4.2004, 15:45


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
mr.DUDA
Дата 3.4.2004, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Угу, только в моём коде ни одной лишней строчки компилятор не генерит smile.gif.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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