Derivando uma classe de CObject
Este artigo descreve as etapas mínimas necessárias para derivar uma classe de CObject.Outros CObject classe artigos descrevem as etapas necessárias para tirar proveito dos específico CObject recursos, como serialização e suporte de diagnóstico de depuração.
Nas discussões de CObject, os termos "arquivo de interface" e "arquivo de implementação" são usados freqüentemente.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 seria criar um arquivo de interface denominado pessoa.H e um arquivo de implementação chamado pessoa.CPP.No entanto, para algumas classes pequenos que não serão compartilhados entre aplicativos, às vezes é mais fácil de combinar a interface e a implementação em um único.Arquivo CPP.
Você pode escolher entre quatro níveis de funcionalidade quando derivando 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 gerenciamento de diagnóstico de memória.
Basic funcionalidade mais suporte para informações de classe de tempo de execução.
Suporte para informações de classe de tempo de execução e criação dinâmica plus funcionalidade básica.
Basic funcionalidade mais suporte para serialização de informações de classe de tempo de execução e criação dinâmica.
Classes projetadas para reutilização (aqueles que mais tarde servirá como classes base) devem incluir pelo menos suporte de classe de tempo de execução e suporte de serialização, se nenhuma necessidade de serialização futuras está prevista.
Escolha o nível de funcionalidade usando macros de declaração e implementação específicas na declaração e implementação das classes que derivam de CObject.
A tabela a seguir mostra a relação entre as macros usadas para oferecer suporte a serialização e informações em tempo de execução.
Usado para serialização e informações de tempo de execução de macros
Macro usada |
CObject::IsKindOf |
CRuntimeClass:: CreateObject |
CArchive::operator >> CArchive::operator << |
---|---|---|---|
Basic CObject funcionalidade |
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 de CObject
Use a sintaxe C++ normal para derivar a classe de 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 CObjectde funções de membro para lidar com as especificidades da nova classe.Por exemplo, geralmente Convém substituir o Dump função da CObject para fornecer depuração saída para o conteúdo de sua classe.Para obter detalhes sobre como substituir Dump, consulte o artigo diagnóstico: despejar o conteúdo de objeto.Você também poderá substituir o AssertValid função da CObject para fornecer teste personalizado para validar a consistência dos membros de dados de 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 de tempo de execução, criação de objetos dinâmicos e serialização.