Compartilhar via


Derivando uma classe de CObject

Este artigo descreve as etapas mínimas necessárias para derivar uma classe de 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 sobre 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 as 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 membro da 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 pequenas que não serão compartilhadas entre aplicativos, às vezes é mais fácil combinar a interface e a implementação em um só 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 de tempo de execução ou serialização, mas inclui o gerenciamento da 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.

Classes projetadas para reutilização (aquelas que servirão como classes base) precisarão incluir pelo menos suporte para classe de tempo de execução e suporte para serialização se alguma serialização futura precisar ser antecipada.

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 a informações de serialização e 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 de CObject Não No No
DECLARE_DYNAMIC Sim No No
DECLARE_DYNCREATE Sim Sim Não
DECLARE_SERIAL Sim Sim Yes

Para usar a funcionalidade básica de CObject

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

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

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

No entanto, normalmente 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 ASSERT_VALID do MFC e CObject::AssertValid.

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

Confira também

Usando CObject