Ableiten einer Klasse von CObject
In diesem Artikel werden die minimalen Schritte beschrieben, die erforderlich sind, um eine Klasse von CObject abzuleiten. In anderen CObject
Klassenartikeln werden die Schritte beschrieben, die erforderlich sind, um bestimmte CObject
Features wie Serialisierung und Diagnosedebuggingunterstützung zu nutzen.
In den Diskussionen CObject
werden häufig die Begriffe "Schnittstellendatei" und "Implementierungsdatei" verwendet. Die Schnittstellendatei (häufig als Headerdatei bezeichnet oder . H-Datei) enthält die Klassendeklaration und alle anderen Informationen, die für die Verwendung der Klasse erforderlich sind. Die Implementierungsdatei (oder . CPP-Datei) enthält die Klassendefinition sowie den Code, der die Klassenmememmfunktionen implementiert. For example, for a class named CPerson
, you would typically create an interface file named PERSON. H und eine Implementierungsdatei mit dem Namen PERSON. CPP. Für einige kleine Klassen, die nicht für Anwendungen freigegeben werden, ist es manchmal einfacher, die Schnittstelle und Implementierung in einem einzigen zu kombinieren. CPP-Datei.
Sie können bei der Ableitung einer Klasse aus vier Funktionalitätsebenen auswählen:CObject
Grundlegende Funktionalität: Keine Unterstützung für Laufzeitklasseninformationen oder Serialisierung, umfasst jedoch die Diagnosespeicherverwaltung.
Grundlegende Funktionen sowie Unterstützung für Laufzeitklasseninformationen.
Grundlegende Funktionen sowie Unterstützung für Laufzeitklasseninformationen und dynamische Erstellung.
Grundlegende Funktionen sowie Unterstützung für Laufzeitklasseninformationen, dynamische Erstellung und Serialisierung.
Klassen, die für die Wiederverwendung entwickelt wurden (die später als Basisklassen dienen), sollten zumindest Laufzeitklassenunterstützung und Serialisierungsunterstützung enthalten, wenn zukünftige Serialisierungsbedarf erwartet wird.
Sie wählen die Funktionalitätsebene aus, indem Sie bestimmte Deklarations- und Implementierungsmakros in der Deklaration und Implementierung der klassen verwenden, von CObject
der Sie abgeleitet werden.
Die folgende Tabelle zeigt die Beziehung zwischen den Makros, die zur Unterstützung von Serialisierungs- und Laufzeitinformationen verwendet werden.
Makros, die für serialisierungs- und Laufzeitinformationen verwendet werden
Makro verwendet | CObject::IsKindOf | Cruntimeclass:: CreateObject |
CArchive::operator>> CArchive::operator<< |
---|---|---|---|
Grundlegende CObject Funktionalität |
Nein | Nr. | Nein |
DECLARE_DYNAMIC |
Ja | Nein | Nein |
DECLARE_DYNCREATE |
Ja | Ja | Nein |
DECLARE_SERIAL |
Ja | Ja | Ja |
So verwenden Sie grundlegende CObject-Funktionen
Verwenden Sie die normale C++-Syntax, um Ihre Klasse von
CObject
(oder von einer von ) abgeleitetenCObject
Klasse abzuleiten.Das folgende Beispiel zeigt den einfachsten Fall, die Ableitung einer Klasse von
CObject
:class CSimple : public CObject { // add CSimple-specific members and functions... };
Normalerweise sollten Sie jedoch einige Memberfunktionen CObject
außer Kraft setzen, um die Besonderheiten Ihrer neuen Klasse zu behandeln. Sie können z. B. die Funktion CObject
außer Kraft setzen, um die Dump
Debugausgabe für den Inhalt Ihrer Klasse bereitzustellen. Ausführliche Informationen zum Überschreiben Dump
finden Sie im Artikel "Objektabbildanpassung". Sie können auch die AssertValid
Funktion CObject
außer Kraft setzen, um benutzerdefinierte Tests bereitzustellen, um die Konsistenz der Datenmmber von Klassenobjekten zu überprüfen. Eine Beschreibung der Außerkraftsetzung AssertValid
finden Sie unter "MFC ASSERT_VALID" und "CObject::AssertValid".
Im Artikel "Angeben von Funktionalitätsebenen " wird beschrieben, wie andere Funktionalitätsebenen angegeben werden, einschließlich Laufzeitklasseninformationen, dynamischer Objekterstellung und Serialisierung.