Ableiten einer Klasse von CObject
In diesem Artikel werden die minimale Schritte, die erforderlich sind, um eine Klasse von CObject zu berechnen.Andere CObject-Klassen artikel beschreiben die Schritte, die erforderlich sind, um bestimmte CObject-Funktionen, z. B. Serialisierungs- und Diagnose debugunterstützung zu nutzen.
Bei der Erläuterung CObject, werden die Begriffe "Schnittstellendatei" und "Implementierungsdatei" häufigsten verwendet.Die Schnittstellendatei (oft aufgerufen oder die Headerdatei. .h-Datei) enthält die Klassendeklaration sowie beliebige andere Informationen, die benötigt werden, um die Klasse zu verwenden.Die Implementierungsdatei (oder die CPP-Datei) enthält die Klassendefinition sowie den Code, der die Klassenmember Funktionen implementiert wird.Zum Beispiel denn eine Klasse mit dem Namen CPerson, würden Sie in der Schnittstellendatei eine Regel erstellen, die PERSON.H und Namen Implementierungsdatei benannte PERSON.CPP.Für einige kleinere Klassen, die nicht von Anwendungen gemeinsam genutzt werden, ist es einfacher, mitunter die Schnittstelle und die Implementierung in eine einzelne CPP-Datei zu kombinieren.
Sie können aus vier Ebenen Funktionalität aktivieren, wenn eine Klasse von CObject berechnet wird:
Grundlegende Funktionalität: Keine Unterstützung für Common Language Runtime beinhaltet jedoch Serialisierung oder klasseninformationen Diagnosen Speicherverwaltung.
Grundlegende Funktionalität plus Unterstützung für Common Language Runtime klasseninformationen.
Grundlegende Funktionalität plus Unterstützung für Common Language Runtime klasseninformationen und dynamische Erstellung.
Grundlegende Funktionalität plus Unterstützung für Common Language Runtime klasseninformationen, das dynamische Erstellen und die Serialisierung.
Die Klassen, die zur Wiederverwendung vorgesehen sind (die später als Basisklasse verwendet wird), sollten die Laufzeitklassen und Serialisierungsunterstützung mindestens enthalten, sofern vorhanden. vorweggenommen werden in zukünftigen Anforderungen
Wählen Sie den Umfang der Funktionalität aus, indem Sie bestimmte Deklarations- und Implementierung von Makros in der Deklaration und Implementierung der Klassen verwenden, die Sie aus CObject berechnen.
In der folgenden Tabelle wird die Beziehung zwischen den Makros an, die zur Unterstützung der Serialisierung sowie Informationen zur Laufzeit verwendet werden.
Makros verwendet die Serialisierung und Laufzeit-Information
Makros verwendet |
CObject::IsKindOf |
CRuntimeClass:: CreateObject |
CArchive::operator>> CArchive::operator<< |
---|---|---|---|
Grundlegende Funktionalität CObject |
Nein |
Nein |
Nein |
DECLARE_DYNAMIC |
Ja |
Nein |
Nein |
DECLARE_DYNCREATE |
Ja |
Ja |
Nein |
DECLARE_SERIAL |
Ja |
Ja |
Ja |
So verwenden CObject-Funktionalität grundlegende
Verwenden Sie die normale C++-Syntax, um die Klasse von CObject abzuleiten (oder von einer Klasse abgeleitet von CObject).
Im folgenden Beispiel wird der einfachsten Fall der Ableitung einer Klasse von CObject an:
class CSimple : public CObject { // add CSimple-specific members and functions... };
Normalerweise sollten Sie jedoch einige der Memberfunktionen von CObject überschreiben, um die Einzelheiten der neuen Klasse zu behandeln.Beispielsweise sollten Sie in der Regel die Dump-Funktion von CObject überschreiben, um das Debuggen zu ermöglichen, das für den Inhalt der Klasse ausgegeben wird.Ausführliche Informationen darüber, wie Dump finden Sie im Artikel Diagnose: Sichern Objekt-Inhalte überschreibt.Sie können auch die AssertValid-Funktion von CObject überschreiben, um benutzerdefinierte Tests bereitstellen, um die Konsistenz der Datenmember des Klassenobjekts zu überprüfen.Eine Beschreibung, wie AssertValid finden Sie unter MFC ASSERT_VALID und CObject::AssertValid überschreibt.
Der Artikel Ebenen der Funktionen angeben wird beschrieben, wie Sie weitere Ebenen von Funktionen, einschließlich der klasseninformationen, Erstellung eines dynamischen Objekts und die Serialisierung angibt.