Derivazione da una classe da CObject

Questo articolo descrive i passaggi minimi necessari per derivare una classe da CObject. Altri CObject articoli di classe descrivono i passaggi necessari per sfruttare funzionalità specifiche CObject , ad esempio il supporto per la serializzazione e il debug di diagnostica.

Nelle discussioni di CObject, i termini "file di interfaccia" e "file di implementazione" vengono usati di frequente. File di interfaccia (spesso denominato file di intestazione o . H file) contiene la dichiarazione di classe e tutte le altre informazioni necessarie per usare la classe . File di implementazione (o . File CPP) contiene la definizione della classe e il codice che implementa le funzioni membro della classe. Ad esempio, per una classe denominata CPerson, in genere si crea un file di interfaccia denominato PERSON. H e un file di implementazione denominato PERSON. CPP. Tuttavia, per alcune classi di piccole dimensioni che non verranno condivise tra le applicazioni, talvolta è più semplice combinare l'interfaccia e l'implementazione in un singolo oggetto . File CPP.

È possibile scegliere tra quattro livelli di funzionalità durante la derivazione di una classe da CObject:

  • Funzionalità di base: nessun supporto per le informazioni sulle classi di runtime o la serializzazione, ma include la gestione della memoria diagnostica.

  • Funzionalità di base e supporto per le informazioni sulle classi di runtime.

  • Funzionalità di base e supporto per le informazioni sulle classi di runtime e la creazione dinamica.

  • Funzionalità di base e supporto per le informazioni sulle classi di runtime, la creazione dinamica e la serializzazione.

Le classi progettate per il riutilizzo (quelle che verranno usate successivamente come classi di base) devono includere almeno il supporto della classe di runtime e il supporto della serializzazione, se è prevista una futura necessità di serializzazione.

È possibile scegliere il livello di funzionalità usando macro di dichiarazione e implementazione specifiche nella dichiarazione e nell'implementazione delle classi derivate da CObject.

Nella tabella seguente viene illustrata la relazione tra le macro usate per supportare la serializzazione e le informazioni di runtime.

Macro usate per la serializzazione e le informazioni di runtime

Macro utilizzata CObject::IsKindOf Cruntimeclass::

CreateObject
CArchive::operator>>

CArchive::operator<<
Funzionalità di base CObject No No No
DECLARE_DYNAMIC No No
DECLARE_DYNCREATE No
DECLARE_SERIAL

Per usare la funzionalità CObject di base

  1. Usare la sintassi C++ normale per derivare la classe da CObject (o da una classe derivata da CObject).

    L'esempio seguente illustra il caso più semplice, la derivazione di una classe da CObject:

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

In genere, tuttavia, è possibile eseguire l'override di alcune funzioni CObjectmembro di per gestire le specifiche della nuova classe. Ad esempio, è in genere consigliabile eseguire l'override della Dump funzione di CObject per fornire l'output di debug per il contenuto della classe. Per informazioni dettagliate su come eseguire l'override Dumpdi , vedere l'articolo Personalizzazione del dump degli oggetti. È anche possibile eseguire l'override della AssertValid funzione di CObject per fornire test personalizzati per convalidare la coerenza dei membri dati degli oggetti classe. Per una descrizione di come eseguire l'override AssertValiddi , vedere MFC AS edizione StandardRT_VALID e CObject::AssertValid.

L'articolo Specifica dei livelli di funzionalità descrive come specificare altri livelli di funzionalità, incluse le informazioni sulle classi di runtime, la creazione di oggetti dinamici e la serializzazione.

Vedi anche

Uso di CObject