Compartilhar via


Conversão de tipo de objetos de classe MFC

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua sendo suportada. No entanto, não estamos mais adicionando recursos ou atualizando a documentação.

As macros de conversão de tipos fornecem uma modo de converter um determinado ponteiro em um ponteiro que aponta para um objeto de classe específica, verificando ou não se a conversão é legal.

A tabela a seguir lista as macros de conversão de tipo MFC.

Macros que convertem ponteiros em objetos de classe MFC

Nome Descrição
DYNAMIC_DOWNCAST Converte um ponteiro em um ponteiro para um objeto de classe enquanto verifica se a conversão é legal.
STATIC_DOWNCAST Converte um ponteiro em um objeto de uma classe para um ponteiro de um tipo relacionado. Em um build de depuração, causará um ASSERT se o objeto não for um "tipo" do tipo de destino.

DYNAMIC_DOWNCAST

Oferece um modo útil de converter um ponteiro em um ponteiro para um objeto de classe enquanto verifica se a conversão é legal.

DYNAMIC_DOWNCAST(class, pointer)

Parâmetros

class
O nome de uma classe.

pointer
Um ponteiro a ser convertido em um ponteiro para um objeto do tipo classe.

Comentários

A macro converterá o parâmetro pointer em um ponteiro para um objeto do tipo do parâmetro class.

Se o objeto referenciado pelo ponteiro for um "tipo" da classe identificada, a macro retornará o ponteiro apropriado. Se não for uma conversão legal, a macro retornará NULL.

STATIC_DOWNCAST

Converte pobject em um ponteiro para um objeto class_name.

STATIC_DOWNCAST(class_name, pobject)

Parâmetros

class_name
O nome da classe para a qual está sendo feita a conversão.

pobject
O ponteiro a ser convertido em um ponteiro para um objeto class_name.

Comentários

pobject deve ser NULL ou apontar para um objeto de uma classe derivada diretamente ou indiretamente de class_name. Em builds do aplicativo com o símbolo de pré-processador _DEBUG definido, a macro fará ASSERT se pobject não for NULL ou se apontar para um objeto que não seja um "tipo" da classe especificada no parâmetro class_name (confira CObject::IsKindOf). Em builds não _DEBUG, a macro executa a conversão sem nenhuma verificação de tipo.

A classe especificada no parâmetro class_name deve ser derivada de CObject e usar DECLARE_DYNAMIC e IMPLEMENT_DYNAMIC, DECLARE_DYNCREATE e IMPLEMENT_DYNCREATE ou as macros DECLARE_SERIAL e IMPLEMENT_SERIAL, conforme explicado no artigo Classe CObject: Como derivar uma classe de CObject.

Por exemplo, você pode converter um ponteiro para CMyDoc, chamado pMyDoc, em um ponteiro para CDocument usando esta expressão:

CDocument* pDoc = STATIC_DOWNCAST(CDocument, pMyDoc);

Se pMyDoc não apontar para um objeto derivado direta ou indiretamente de CDocument, a macro será ASSERT.

Confira também

Macros e Globais