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
Use a sintaxe C++ normal para derivar a classe de
CObject
(ou de uma classe derivada deCObject
).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.