Derivando uma classe de CObject
Este artigo descreve as etapas mínimas necessárias para derivar uma classe de CObject. OutrosCObject classe artigos descrevem sistema autônomo etapas necessárias para tirar proveito dos específicos CObject recursos, sistema autônomo a serialização e diagnóstico de suporte de depuração.
Nas discussões de CObject, os termos "interface do arquivo" e "arquivo de implementação" são usados com freqüência. O arquivo de interface (geralmente chamado do arquivo de cabeçalho ou o 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 sistema autônomo o código que implementa sistema autônomo funções de membro de classe.Por exemplo, para uma classe chamada CPerson, você normalmente seria criar um arquivo de interface denominado PERSON.H e um arquivo de implementação chamado PERSON.CPP. No entanto, para algumas classes pequenos que não serão compartilhados entre aplicativos, às vezes é mais fácil agrupar 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 em time de execução informações de classe ou serialização, mas inclui gerenciamento de diagnóstico de memória.
Funcionalidade básica mais suporte para em time de execução informações de classe.
Funcionalidade básica mais suporte para em time de execução informações e criação dinâmica de classe.
Funcionalidade básica mais suporte para em time de execução serialização de informações e criação dinâmica de classe.
Classes projetadas para reutilização (aquelas que posteriormente servirá sistema autônomo classes base) devem incluir pelo menos em time de execução classe suporte de serialização e se há previsão de qualquer necessidade futura de serialização.
Você escolher o nível de funcionalidade usando declaração específica e as macros de implementação na declaração e implementação das classes que deriva CObject.
A tabela a seguir mostra a relação entre as macros usados para oferecer suporte a serialização e em time de execução informações.
Usado para serialização e em time de execução informações macros
Macro usada |
CObject::IsKindOf |
CRuntimeClass:: CreateObject |
CArchive::operador >> CArchive::operador << |
---|---|---|---|
Básico 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, entretanto, talvez você queira substituir algumas CObject's funções de membro para lidar com as especificidades de sua nova classe. Por exemplo, você pode geralmente deseja substituir o Dump função do CObject para fornecer saída de depuração para o Sumário de sua classe. Para obter detalhes sobre como substituir Dump, consulte o artigo Diagnóstico: Despejar o Sumário do objeto.Você também poderá substituir o AssertValid função do CObject para fornecer teste personalizado para validar a consistência dos membros de dados de objetos de classes. Para obter uma descrição de como substituir AssertValid, consulte MFC ASSERT_VALID e CObject::AssertValid.
O artigo Especificar níveis de funcionalidade descreve como especificar outros níveis de funcionalidade, incluindo informações de classe de time de execução, a criação de objeto dinâmico e a serialização.