Partilhar via


Estrutura CRuntimeClass

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

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

Sintaxe

struct CRuntimeClass

Membros

Métodos Públicos

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

Membros de Dados Públicos

Nome Description
CRuntimeClass::m_lpszClassName O nome da classe.
CRuntimeClass::m_nObjectSize O tamanho do objeto em bytes.
CRuntimeClass::m_pBaseClass Um apontador para a CRuntimeClass estrutura da classe base.
CRuntimeClass::m_pfnCreateObject Um apontador para a função que cria dinamicamente o objeto.
CRuntimeClass::m_pfnGetBaseClass Devolve a CRuntimeClass estrutura (disponível apenas quando ligada dinamicamente).
CRuntimeClass::m_wSchema O número do esquema da turma.

Observações

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

A capacidade de determinar a classe de um objeto em tempo de execução é útil quando é necessária uma verificação extra de tipos dos argumentos da função, ou quando é necessário escrever código de propósito especial baseado na classe de um objeto. A informação de classe em tempo de execução não é suportada diretamente pela linguagem C++.

CRuntimeClass fornece informação sobre o objeto C++ relacionado, como um ponteiro para o CRuntimeClass da classe base e o nome da classe ASCII da classe relacionada. Esta 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 deriva de uma classe específica.

Para mais informações sobre a utilização CRuntimeClassde , consulte o artigo Acesso à Informação Run-Time Classe.

Hierarquia de herança

CRuntimeClass

Requerimentos

Cabeçalho: afx.h

CRuntimeClass::CreateObject

Chame esta função para criar dinamicamente a classe especificada durante a 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 retorno

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

Observações

As classes derivadas de CObject podem suportar a criação dinâmica, que é a capacidade de criar um objeto de uma classe especificada em tempo de execução. As classes de documento, vista e frame, por exemplo, devem suportar a criação dinâmica. Para mais informações sobre criação dinâmica e o CreateObject membro, veja Classe CObject e Classe CObject: Especificar Níveis de Funcionalidade.

Example

Veja o exemplo de IsDerivedFrom.

CRuntimeClass::FromName

Chame esta função para recuperar a CRuntimeClass estrutura 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 deriva de CObject.

Valor de retorno

Um ponteiro para um CRuntimeClass objeto, correspondente ao nome passado em lpszClassName. A função devolve NULL se não for encontrado nenhum nome de classe correspondente.

Example

// 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 esta função para determinar se a classe que chama é derivada da classe especificada no parâmetro pBaseClass .

BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

Parâmetros

pBaseClass
O nome familiar de uma classe deriva de CObject.

Valor de retorno

TRUE se a chamada IsDerivedFrom da classe for derivada da classe base cuja CRuntimeClass estrutura é dada como parâmetro; caso contrário FALSE.

Observações

A relação é determinada por "caminhar" desde a classe do membro ao longo da cadeia de classes derivadas até ao topo. Esta função só devolve FALSE se não for encontrada correspondência para a classe base.

Observação

Para usar a CRuntimeClass estrutura, deve incluir a macro IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE ou IMPLEMENT_SERIAL na implementação da classe para a qual pretende obter informação de objetos em tempo de execução.

Para mais informações sobre a utilização CRuntimeClassde , veja o artigo Classe CObject: Acesso à Informação Run-Time Classe.

Example

// 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 terminada por nulo contendo o nome da classe ASCII.

Observações

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

Example

Veja o exemplo de IsDerivedFrom.

CRuntimeClass::m_nObjectSize

O tamanho do objeto, em bytes.

Observações

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

Example

Veja o exemplo de IsDerivedFrom.

CRuntimeClass::m_pBaseClass

Se a sua aplicação se ligar estaticamente ao MFC, este membro de dados contém um ponteiro para a CRuntimeClass estrutura da classe base.

Observações

Se a sua aplicação se liga dinamicamente à biblioteca MFC, veja m_pfnGetBaseClass.

Example

Veja o exemplo de IsDerivedFrom.

CRuntimeClass::m_pfnCreateObject

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

Observações

Este ponteiro só é válido se a classe suportar a criação dinâmica; caso contrário, a função devolve NULL.

CRuntimeClass::m_pfnGetBaseClass

Se a sua aplicação usar a biblioteca MFC como uma DLL partilhada, este membro de dados aponta para uma função que devolve a CRuntimeClass estrutura da classe base.

Observações

Se a sua candidatura está ligada estaticamente à biblioteca MFC, veja m_pBaseClass.

Example

Veja o exemplo de IsDerivedFrom.

CRuntimeClass::m_wSchema

O número do esquema (-1 para classes não serializáveis).

Observações

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

Example

Veja o exemplo de IsDerivedFrom.

Consulte também

Gráfico de Hierarquia
CObject::GetRuntimeClass
CObject::IsMeio Que
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL