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 |
Sì | No | No |
DECLARE_DYNCREATE |
Sì | Sì | No |
DECLARE_SERIAL |
Sì | Sì | Sì |
Per usare la funzionalità CObject di base
Usare la sintassi C++ normale per derivare la classe da
CObject
(o da una classe derivata daCObject
).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 CObject
membro 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 Dump
di , 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 AssertValid
di , 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.