Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MFC Container, Определения объекта 
:(
    Опции темы
EgorTheBlade
Дата 7.7.2010, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброе утро. Не поможете с контейнером?У меня возник вопрос с CObList.
Есть Классы и они падают в стэк.
CObList mylist;
mylist.addTail(CCircle);
mylist.addTail(CTriangle);
mylist.addTail(CRectangle);
как потом определить какая фигура при выводе на экран?
CObject obj = (CCIrcle*)mylist.getHead(); можно так.Но как определить позицию? в Голове может быть и не CCircle;
Что то подобное я наблюдал тут в одной теме на форуме.Нужно задать доп переменную определяющию позицию?
PM MAIL Skype   Вверх
RobinHoodPHD
Дата 7.7.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Попробуйте так:
RUNTIME_CLASS
Там есть пример:
Код

void main()
{
    CMyObject* myObj = new CMyObject; 
    CRuntimeClass* pClass = RUNTIME_CLASS(CMyObject);
    if (myObj->IsKindOf(pClass))
        cout << "CMyObject Class" << endl;
    else
        cout << "Not CMyObject Class" << endl; 
}

С помощью IsKindOf можно определить, принадлежит ли объект к определенному классу. Как всем этим пользоваться - читаем ссылку.

Добавлено через 7 минут
А вообще для вывода на экран лично я сделал так (писал тут недавно нечто подобное):
Сделал один абстрактный класс Geom с чисто виртуальной функцией Draw. Класс Geom является родителем классов Triangle, Circle и так далее. Это дает возможность использовать динамический полиморфизм при выводе фигур, т.е. делаем цикл по всем фигурам (т.е. обход CObList) и вызываем для них виртуальную функцию Draw. Т.к. функция виртуальная то будет вызвана реализация для нужного класса.
Вот например вывод фигур в моей программе:
Код

void CSDI1View::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
    
    
CSDI1Doc * Doc = GetDocument ();
POSITION pos;

for( pos = Doc->ObjectList.GetHeadPosition(); pos != NULL; )
{
       Geom * el = (Geom *) Doc->ObjectList.GetNext (pos);
       el->Draw ();
}
}
  
PM MAIL   Вверх
EgorTheBlade
Дата 7.7.2010, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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


 




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


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

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