Поделиться через


Структура CRuntimeClass

Каждый класс, производный от CObject , связан со структурой CRuntimeClass , которую можно использовать для получения сведений об объекте или его базовом классе во время выполнения.

Синтаксис

struct CRuntimeClass

Участники

Открытые методы

Имя Описание
CRuntimeClass::CreateObject Создает объект во время выполнения.
CRuntimeClass::FromName Создает объект во время выполнения с помощью знакомого имени класса.
CRuntimeClass::IsDerivedFrom Определяет, является ли класс производным от указанного класса.

Открытые члены данных

Имя Описание
CRuntimeClass::m_lpszClassName Имя класса.
CRuntimeClass::m_nObjectSize Размер объекта в байтах.
CRuntimeClass::m_pBaseClass Указатель на CRuntimeClass структуру базового класса.
CRuntimeClass::m_pfnCreateObject Указатель на функцию, которая динамически создает объект.
CRuntimeClass::m_pfnGetBaseClass Возвращает структуру CRuntimeClass (доступную только при динамическом связывании).
CRuntimeClass::m_wSchema Номер схемы класса.

Замечания

CRuntimeClass является структурой и поэтому не имеет базового класса.

Возможность определить класс объекта во время выполнения полезна, если требуется дополнительная проверка типов аргументов функции или когда необходимо написать код специального назначения на основе класса объекта. Сведения о классе времени выполнения не поддерживаются непосредственно языком C++.

CRuntimeClass предоставляет сведения о связанном объекте C++, например указателе на CRuntimeClass базовый класс и имя класса ASCII связанного класса. Эта структура также реализует различные функции, которые можно использовать для динамического создания объектов, указания типа объекта с помощью знакомого имени и определения, является ли связанный класс производным от определенного класса.

Дополнительные сведения об использовании CRuntimeClassсм. в статье, в статье о доступе к сведениям о классе времени выполнения.

Иерархия наследования

CRuntimeClass

Требования

Заголовок: afx.h

CRuntimeClass::CreateObject

Вызовите эту функцию для динамического создания указанного класса во время выполнения.

CObject* CreateObject();

static CObject* PASCAL CreateObject(LPCSTR lpszClassName);

static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);

Параметры

lpszClassName
Знакомое имя создаваемого класса.

Возвращаемое значение

Указатель на только что созданный объект или NULL, если имя класса не найдено или недостаточно памяти для создания объекта.

Замечания

Классы, производные от CObject них, могут поддерживать динамическое создание, что позволяет создавать объект указанного класса во время выполнения. Например, классы документов, представлений и фреймов должны поддерживать динамическое создание. Дополнительные сведения о динамическом создании и члене см. в разделе CObject Class и CreateObject CObject Class: указание уровней функциональности.

Пример

См. пример для IsDerivedFrom.

CRuntimeClass::FromName

Вызовите эту функцию, чтобы получить CRuntimeClass структуру, связанную с знакомым именем.

static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);

static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);

Параметры

lpszClassName
Знакомое имя класса, производного от CObject.

Возвращаемое значение

Указатель на объект, соответствующий имени, передаваемого CRuntimeClass в lpszClassName. Функция возвращает значение NULL, если не найдено соответствующее имя класса.

Пример

// This example creates an object if CAge is defined.

CRuntimeClass* pClass = CRuntimeClass::FromName(_T("CAge"));
if (pClass == NULL)
{
   // not found, display a warning for diagnostic purposes
   AfxMessageBox(_T("Warning: CMyClass not defined"));
   return NULL;
}

// attempt to create the object with the found CRuntimeClass
CObject* pObject = pClass->CreateObject();

CRuntimeClass::IsDerivedFrom

Вызовите эту функцию, чтобы определить, является ли вызывающий класс производным от класса, указанного в параметре pBaseClass .

BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

Параметры

pBaseClass
Знакомое имя класса, производного от CObject.

Возвращаемое значение

ЗНАЧЕНИЕ TRUE, если вызов IsDerivedFrom класса является производным от базового класса, структура которого CRuntimeClass присваивается в качестве параметра; в противном случае — FALSE.

Замечания

Связь определяется путем "ходьбы" от класса члена вверх по цепочке производных классов вплоть до верхней части. Эта функция возвращает значение FALSE, только если совпадение не найдено для базового класса.

Примечание.

Чтобы использовать CRuntimeClass структуру, необходимо включить макрос IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE или IMPLEMENT_SERIAL в реализацию класса, для которого требуется получить сведения об объекте времени выполнения.

Дополнительные сведения об использовании CRuntimeClassсм. в статье класс CObject: доступ к сведениям о классе времени выполнения.

Пример

// This example creates an object from the run-time class. It only 
// creates objects derived from CWnd.

// We only want to create an object derived from CWnd.
if (!pClass->IsDerivedFrom(RUNTIME_CLASS(CWnd)))
{
   TRACE(_T("Error; Object %s is not derived from CWnd\n"),
      pClass->m_lpszClassName);
   return FALSE;
}

// Get a pointer to the base class CRuntimeClass.
#ifdef _AFXDLL
CRuntimeClass* pBaseClass = pClass->m_pfnGetBaseClass();
#else
CRuntimeClass* pBaseClass = pClass->m_pBaseClass;
#endif
ASSERT(pBaseClass != NULL);

TRACE("Creating object %s derived from %s, with object size %d "
   "and schema %d\n", pClass->m_lpszClassName,
   pBaseClass->m_lpszClassName, pClass->m_nObjectSize,
   pClass->m_wSchema);

// Create the object.
CObject* pObject = pClass->CreateObject();

CRuntimeClass::m_lpszClassName

Строка, завершающая значение NULL, содержащая имя класса ASCII.

Замечания

Это имя можно использовать для создания экземпляра класса с помощью FromName функции-члена.

Пример

См. пример для IsDerivedFrom.

CRuntimeClass::m_nObjectSize

Размер объекта в байтах.

Замечания

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

Пример

См. пример для IsDerivedFrom.

CRuntimeClass::m_pBaseClass

Если приложение статически связывается с MFC, этот элемент данных содержит указатель на CRuntimeClass структуру базового класса.

Замечания

Если приложение динамически ссылается на библиотеку MFC, см . m_pfnGetBaseClass.

Пример

См. пример для IsDerivedFrom.

CRuntimeClass::m_pfnCreateObject

Указатель функции на конструктор по умолчанию, который создает объект класса.

Замечания

Этот указатель действителен только в том случае, если класс поддерживает динамическое создание; в противном случае функция возвращает ЗНАЧЕНИЕ NULL.

CRuntimeClass::m_pfnGetBaseClass

Если приложение использует библиотеку MFC в качестве общей библиотеки DLL, этот элемент данных указывает на функцию, которая возвращает CRuntimeClass структуру базового класса.

Замечания

Если приложение статически ссылается на библиотеку MFC, см . m_pBaseClass.

Пример

См. пример для IsDerivedFrom.

CRuntimeClass::m_wSchema

Номер схемы (-1 для несериализируемых классов).

Замечания

Дополнительные сведения о номерах схем см . в макросе IMPLEMENT_SERIAL .

Пример

См. пример для IsDerivedFrom.

См. также

Диаграмма иерархии
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL