Estrutura CRuntimeClass

Cada classe derivada CObject está associada a uma estrutura CRuntimeClass que você pode usar para obter informações sobre um objeto ou sua classe base em tempo de execução.

Sintaxe

struct CRuntimeClass

Membros

Métodos públicos

Nome Descrição
CRuntimeClass::CreateObject Cria um objeto durante o tempo de execução.
CRuntimeClass::FromName Cria um objeto durante o tempo de execução usando o nome de classe familiar.
CRuntimeClass::IsDerivedFrom Determina se a classe é derivada da classe especificada.

Membros de Dados Públicos

Nome Descrição
CRuntimeClass::m_lpszClassName O nome da classe.
CRuntimeClass::m_nObjectSize O tamanho do objeto em bytes.
CRuntimeClass::m_pBaseClass Um ponteiro para a estrutura CRuntimeClass da classe base.
CRuntimeClass::m_pfnCreateObject Um ponteiro para a função que cria dinamicamente o objeto.
CRuntimeClass::m_pfnGetBaseClass Retorna a estrutura CRuntimeClass (disponível somente quando vinculada dinamicamente).
CRuntimeClass::m_wSchema O número de esquema da classe.

Comentários

CRuntimeClass é uma estrutura, portanto, não tem uma classe base.

A capacidade de determinar a classe de um objeto em tempo de execução é útil quando a verificação de tipo extra de argumentos de função é necessária ou quando você deve escrever um código de finalidade especial com base na classe de um objeto. Não há suporte para informações de classe em tempo de execução diretamente pela linguagem C++.

CRuntimeClass fornece informações sobre o objeto C++ relacionado, como um ponteiro para a classe base CRuntimeClass e o nome de classe ASCII da classe relacionada. Essa estrutura também implementa várias funções que podem ser usadas para criar objetos dinamicamente, especificando o tipo de objeto usando um nome familiar e determinando se a classe relacionada é derivada de uma classe específica.

Para mais informações sobre como usar CRuntimeClass, confira o artigo Como acessar informações da classe em tempo de execução.

Hierarquia de herança

CRuntimeClass

Requisitos

Cabeçalho: afx.h

CRuntimeClass::CreateObject

Chame essa função para criar dinamicamente a classe especificada durante o tempo de execução.

CObject* CreateObject();

static CObject* PASCAL CreateObject(LPCSTR lpszClassName);

static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);

Parâmetros

lpszClassName
O nome familiar da classe a ser criada.

Valor de Devolução

Um ponteiro para o objeto recém-criado ou NULL se o nome de classe não for encontrado ou não houver memória suficiente para criar o objeto.

Comentários

Classes derivadas de CObject podem dar suporte à criação dinâmica, que é a capacidade de criar um objeto de uma classe especificada em tempo de execução. As classes de documento, exibição e quadro, por exemplo, devem dar suporte à criação dinâmica. Para mais informações sobre a criação dinâmica e o CreateObject membro, confira Classe CObject e Classe CObject: como especificar níveis de funcionalidade.

Exemplo

Veja o exemplo de IsDerivedFrom.

CRuntimeClass::FromName

Chame essa função para recuperar a estrutura CRuntimeClass associada ao nome familiar.

static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);

static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);

Parâmetros

lpszClassName
O nome familiar de uma classe derivada de CObject.

Valor de Devolução

Um ponteiro para um objeto CRuntimeClass, correspondente ao nome conforme passado em lpszClassName. A função retornará NULL se nenhum nome de classe correspondente tiver sido encontrado.

Exemplo

// 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

Chame essa função para determinar se a classe de chamada é derivada da classe especificada no parâmetro pBaseClass.

BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

Parâmetros

pBaseClass
O nome familiar de uma classe derivada de CObject.

Valor de Devolução

TRUE se a classe que está chamando IsDerivedFrom for derivada da classe base cuja estrutura CRuntimeClass é fornecida como um parâmetro; caso contrário, FALSE.

Comentários

A relação é determinada por "andar" da classe do membro até a cadeia de classes derivadas até o topo. Essa função só retornará FALSE se nenhuma correspondência for encontrada para a classe base.

Observação

Para usar a estrutura CRuntimeClass, você deve incluir a macro IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE ou IMPLEMENT_SERIAL na implementação da classe para a qual deseja recuperar informações de objeto em tempo de execução.

Para mais informações sobre como usar CRuntimeClass, confira o artigo Classe CObject: como acessar informações de classe em tempo de execução.

Exemplo

// 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

Uma cadeia de caracteres terminada em nulo que contém o nome de classe ASCII.

Comentários

Esse nome pode ser usado para criar uma instância da classe usando a função de membro FromName.

Exemplo

Veja o exemplo de IsDerivedFrom.

CRuntimeClass::m_nObjectSize

O tamanho do objeto em bytes.

Comentários

Se o objeto tiver membros de dados que apontam para a memória alocada, o tamanho dessa memória não será incluído.

Exemplo

Veja o exemplo de IsDerivedFrom.

CRuntimeClass::m_pBaseClass

Se o aplicativo for vinculado estaticamente ao MFC, esse membro de dados conterá um ponteiro para a estrutura da classe base CRuntimeClass.

Comentários

Se o aplicativo for vinculado dinamicamente à biblioteca MFC, confira m_pfnGetBaseClass.

Exemplo

Veja o exemplo de IsDerivedFrom.

CRuntimeClass::m_pfnCreateObject

Um ponteiro de função para o construtor padrão que cria um objeto de sua classe.

Comentários

Esse ponteiro só será válido se a classe der suporte à criação dinâmica; caso contrário, a função retornará NULL.

CRuntimeClass::m_pfnGetBaseClass

Se o aplicativo usar a biblioteca MFC como uma DLL compartilhada, esse membro de dados apontará para uma função que retorna a estrutura CRuntimeClass da classe base.

Comentários

Se o aplicativo for vinculado estaticamente à biblioteca MFC, confira m_pBaseClass.

Exemplo

Veja o exemplo de IsDerivedFrom.

CRuntimeClass::m_wSchema

O número do esquema (-1 para classes não sequenciais).

Comentários

Para mais informações sobre números de esquema, confira a macro IMPLEMENT_SERIAL.

Exemplo

Veja o exemplo de IsDerivedFrom.

Confira também

Gráfico da hierarquia
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL