Compartilhar via


Conversão de tipo de objetos de classe MFC

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