Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
Use a sintaxe C++ normal para derivar sua classe
CObject(ou de uma classe derivada deCObject).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.