Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Вот в С++ проблема (работа с объектами)вышла. Помогите кто может.

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
focus
Гость





СообщениеДобавлено: Пн Мар 11 2002 17:49    Заголовок сообщения: Вот в С++ проблема (работа с объектами)вышла. Помогите кто может. Ответить с цитатой

Вот и спасибо! Ладно у меня вот такая незадача. В С++ надо как - то сделать вот, что. Определить является ли для определённого объекта некоторый класс родительский. На сколько я знаю в Дельфи есть некоторый способ. А вот как там с С++ дела обстоят. За ранее благодарен.
Вернуться к началу
AndreyC



Зарегистрирован: 11.03.2002
Сообщения: 3

СообщениеДобавлено: Пн Мар 11 2002 19:06    Заголовок сообщения: Re: Вот в С++ проблема (работа с объектами)вышла. Помогите кто может. Ответить с цитатой

Давно не писал на С++, но сдается мне, что dynamic_cast (точное название не помню) возвратит NULL, если преобразование не возможно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
focus
Гость





СообщениеДобавлено: Вт Мар 12 2002 09:06    Заголовок сообщения: Re: Вот в С++ проблема (работа с объектами)вышла. Помогите кто может. Ответить с цитатой

>>Давно не писал на С++, но сдается мне, что dynamic_cast (точное название не помню) возвратит NULL, если преобразование не возможно.

Вот вроде то. Спасибо. Огромное . Я буду всем благодарен за другую информацию.
Вернуться к началу
Alexy



Зарегистрирован: 22.10.2003
Сообщения: 48

СообщениеДобавлено: Вт Мар 12 2002 12:05    Заголовок сообщения: Re: Вот в С++ проблема (работа с объектами)вышла. Помогите кто может. Ответить с цитатой

Если ты пользуешься MFC, то можно так:
CRuntimeClass* rtc = RUNTIME_CLASS(class_name);
boolrtc->IsDerivedFrom(RUNTIME_CLASS(base_.. других бибилиотках могут быть др. имена ф-ций и макросов, но содержание то же. Вот схема одного из вариантов:

1. Пишем класс RTCList со статическими ф-ми
void add(RTClassInfo*);
RTClassInfo* forName(const char*);
bool isDerivedFrom(RTClassInfo*);
...
Класс RTCList поддерживает статическую коллекцию кассов-описателей.

2. Каждый класс, желающий быть rttiable Smile
декларирует пару макросов, скажем
DECLARE_DYN_CREATE(class_name) в декларации класса, и
IMPLEMENT_DYN_CREATE(class_name, base_class_name) в подходящем cpp файле.

DECLARE_DYN_CREATE добавляет в класс декларации static объекта типа RTClassInfo и
static ф-цию BaseObject* __cdecl _createFun();
+ всё на что хватит фантазии (напр. поддержку virtual inheritance)

Что делает IMPLEMENT_DYN_CREATE уже понятно.
c-tor RTClassInfo может выглядеть так:

RTClassInfo::RTClassInfo(const char* clName,
const char* baseName,
BaseObject* (__cdecl CREATOR*)())
{
... init data-members;
RTCList::add(this);
...
}

Поскольку RTClassInfo - static объект, к тому времени, когда программа начнёт выполнятся, RTCList уже будет знать о всех существующих инстансах RTClassInfo.

А вот так создаётся объект:

RTClassInfo* rtc = RUN_TIME_CLASS(MyObject);
if(!rtc)
throw BadRequestException(.....);
MyObject* obj = (MyObject*) rtc->newInstance();

RTClassInfo::newInstance() просто вызывает CREATOR. Поскольку речь идёт о generic механизме, ф-я CREATOR (а за ней и newInstance) возвращают BaseObject*, а не MyObject*. По этой же причине каждый класс поддерживающий такую инстантиацию должен иметь c-tor без параметров.

Конечно MyObject* obj = (MyObject*) ... выглядит подозрительно, но в данном случае downcast абсолютно надёжен, поскольку RTClassInfo для MyObject может создать только MyObject.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...