Derivando una classe da CObject
Questo articolo vengono descritti i passaggi minimi necessari per derivare la classe da CObject.Gli articoli della classe di CObject descritti i passaggi necessari per sfruttare le funzionalità specifiche di CObject , ad esempio il supporto di debug di diagnostica e di serializzazione.
Durante le discussioni di CObject, i termini “collegare il file„ e “il file di implementazione„ viene utilizzato di frequente.Il file di interfaccia (spesso chiamato il file di intestazione, o. Il file H) contiene la dichiarazione di classe e altre informazioni necessarie per utilizzare la classe.Il file di implementazione (o file di .CPP) contiene la definizione della classe nonché il codice che implementa le funzioni membro della classe.Ad esempio, per CPersonclasse denominata, in genere è possibile creare un file di interfaccia denominato PERSON.H e un file di implementazione denominato PERSON.CPP.Tuttavia, per alcune piccole classi che non sono condivise tra le applicazioni, può risultare più facile combinare l'interfaccia e l'implementazione in un singolo file di .CPP.
È possibile scegliere tra quattro livelli di funzionalità quando si deriva una classe da CObject:
Funzionalità di base: Nessun supporto per informazioni o alla serializzazione della classe di runtime ma include la gestione della memoria diagnostica.
Funzionalità di base più supporto per informazioni sulla classe di runtime.
Funzionalità di base più supporto per informazioni sulla classe di runtime e alla creazione dinamica.
Funzionalità di base più supporto per informazioni sulla classe di runtime, alla creazione dinamica e la serializzazione.
Le classi progettate per riutilizzare (quelle che successivamente fungerà da classe di base) devono includere almeno il supporto della classe di runtime e il supporto della serializzazione, se il necessario futuro di serializzazione viene pianificato.
Scegliere il livello di funzionalità utilizzando le macro specifiche delle dichiarazioni e le implementazioni nella dichiarazione e l'implementazione di classi che derivano da CObject.
Nella tabella seguente è illustrata la relazione tra le macro si utilizza la serializzazione e alle informazioni di runtime di supporto.
Macro utilizzate per la serializzazione e le informazioni di runtime
Macro utilizzata |
CObject::IsKindOf |
CRuntimeClass:: CreateObject |
CArchive::operator>> CArchive::operator<< |
---|---|---|---|
Funzionalità di base di CObject |
No |
No |
No |
DECLARE_DYNAMIC |
Sì |
No |
No |
DECLARE_DYNCREATE |
Sì |
Sì |
No |
DECLARE_SERIAL |
Sì |
Sì |
Sì |
Per utilizzare funzionalità di base di CObject
Utilizzare la sintassi C++ normale per derivare la classe da CObject (o da una classe derivata da CObject).
Nell'esempio seguente viene illustrato 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 membro di entity_CODECObject per gestire le specifiche della nuova classe.Ad esempio, è in genere possibile che si desideri eseguire l'override della funzione di Dump di CObject per fornire l'output di debug per il contenuto della classe.Per informazioni dettagliate su come eseguire l'override di Dump, vedere l'articolo diagnostica: Eseguire il dump l'indice dell'oggetto.È inoltre consigliabile eseguire l'override della funzione di AssertValid di CObject per fornire il test personalizzato per convalidare la coerenza dei membri dati di oggetti classe.Per una descrizione dell'override AssertValid, vedere MFC ASSERT_VALID e CObject::AssertValid.
L'articolo specificare i livelli di funzionalità viene descritto come specificare altri livelli di funzionalità, incluse informazioni sulla classe di runtime, la creazione di un oggetto dinamico e la serializzazione.