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 CObjectwerden 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 CObjectder 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

  1. Verwenden Sie die normale C++-Syntax, um Ihre Klasse von CObject (oder von einer von ) abgeleiteten CObjectKlasse 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 CObjectauß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 Dumpfinden 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 AssertValidfinden 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.

Siehe auch

Verwenden von CObject