Compartilhar via


Derivando uma classe de CObject

Este artigo descreve as etapas mínimas necessárias para derivar uma classe do CObject. Outros artigos sobre a classe CObject descrevem as etapas necessárias para aproveitar recursos específicos de CObject, como o suporte para serialização e depuração de diagnóstico.

Nas discussões de CObject, os termos "arquivo de interface" e "arquivo de implementação" são usados com frequência. O arquivo de interface (geralmente chamado de arquivo de cabeçalho ou . Arquivo H) contém a declaração de classe e quaisquer outras informações necessárias para usar a classe. O arquivo de implementação (ou . Arquivo CPP) contém a definição de classe, bem como o código que implementa as funções de membro de classe. Por exemplo, para uma classe chamada CPerson, você normalmente criaria um arquivo de interface chamado PERSON. H e um arquivo de implementação chamado PERSON. CPP. No entanto, para algumas classes menores que não serão compartilhadas entre aplicativos, às vezes é mais fácil combinar a interface e a implementação em um único arquivo .CPP.

Você pode escolher entre quatro níveis de funcionalidade ao derivar uma classe de CObject:

  • Funcionalidade básica: não há suporte para informações de classe em tempo de execução ou serialização, mas inclui o gerenciamento de memória de diagnóstico.

  • Funcionalidade básica mais suporte para informações de classe de tempo de execução.

  • Funcionalidade básica mais suporte para informações de classe de tempo de execução e criação dinâmica.

  • Funcionalidade básica mais suporte para informações de classe de tempo de execução, criação dinâmica e serialização.

As classes projetadas para reutilização (aquelas que servirão posteriormente como classes base) devem, pelo menos, incluir suporte de classe em tempo de execução e suporte à serialização, se alguma necessidade futura de serialização for prevista.

Você escolhe o nível de funcionalidade usando macros de declaração e implementação específicas na declaração e na implementação das classes das quais deriva CObject.

A tabela a seguir mostra a relação entre as macros usadas para dar suporte à serialização e às informações de tempo de execução.

Macros usadas para informações de serialização e tempo de execução

Macro usada CObject::IsKindOf CRuntimeClass::

CreateObject
CArchive::operator>>

CArchive::operator<<
Funcionalidade básica CObject Não Não Não
DECLARE_DYNAMIC Sim Não Não
DECLARE_DYNCREATE Sim Sim Não
DECLARE_SERIAL Sim Sim Sim

Para usar a funcionalidade básica do CObject

  1. Use a sintaxe C++ normal para derivar sua classe CObject (ou de uma classe derivada de CObject).

    O exemplo a seguir mostra o caso mais simples, a derivação de uma classe de CObject:

    class CSimple : public CObject
    {
       // add CSimple-specific members and functions...
    };
    

Normalmente, no entanto, talvez você queira substituir algumas das funções-membro de CObject para lidar com as especificidades da nova classe. Por exemplo, você pode querer substituir a função Dump de CObject para fornecer a saída da depuração para o conteúdo de sua classe. Para obter detalhes sobre como substituir Dump, consulte o artigo Personalização do despejo de objeto. Talvez você também queira substituir a função AssertValid de CObject para fornecer testes personalizados para validar a consistência dos membros de dados dos objetos de classe. Para obter uma descrição de como substituir AssertValid, consulte MFC ASSERT_VALID e CObject::AssertValid.

O artigo Especificando Níveis de Funcionalidade descreve como especificar outros níveis de funcionalidade, incluindo informações de classe em tempo de execução, criação de objeto dinâmico e serialização.

Consulte também

Usando CObject