Compartir a través de


Derivar una clase de CObject

En este artículo se describen los pasos mínimos necesarios para derivar una clase de CObject. En otros artículos de la clase CObject se describen los pasos necesarios para aprovechar las características CObject específicas, como la compatibilidad con la serialización y la depuración de diagnóstico.

En los debates de CObject, los términos "archivo de interfaz" y "archivo de implementación" se usan con frecuencia. El archivo de interfaz (a menudo denominado archivo de encabezado o archivo .H) incluye la declaración de clase y cualquier otra información necesaria para usar la clase. El archivo de implementación (o el archivo .CPP) contiene la definición de clase, así como el código que implementa las funciones miembro de la clase. Por ejemplo, para una clase denominada CPerson, normalmente crearía un archivo de interfaz denominado PERSON.H y un archivo de implementación denominado PERSON.CPP. Pero para algunas clases pequeñas que no se compartirán entre las aplicaciones, a veces es más fácil combinar la interfaz y la implementación en un solo archivo .CPP.

Puede elegir entre cuatro niveles de función al derivar una clase de CObject:

  • Función básica: no se admite la información o la serialización de la clase en tiempo de ejecución, pero se incluye la administración de memoria de diagnóstico.

  • Función básica más compatibilidad con la información de clase en tiempo de ejecución.

  • Función básica más compatibilidad con la información de clase en tiempo de ejecución y la creación dinámica.

  • Función básica más compatibilidad con la información de clase en tiempo de ejecución, la creación dinámica y la serialización.

Las clases diseñadas para su reutilización (las que servirán posteriormente como clases base) deben incluir al menos la compatibilidad con la clase en tiempo de ejecución y la compatibilidad con la serialización, si se prevé cualquier necesidad futura de serialización.

Puede elegir el nivel de función mediante macros de implementación y declaración específicas en la declaración e implementación de las clases derivadas de CObject.

En la tabla siguiente se muestra la relación entre las macros usadas para admitir la serialización y la información en tiempo de ejecución.

Macros usadas para la serialización y la información en tiempo de ejecución

Macro usada CObject::IsKindOf CRuntimeClass::

CreateObject
CArchive::operator>>

CArchive::operator<<
Función de CObject básica No No No
DECLARE_DYNAMIC No No
DECLARE_DYNCREATE No
DECLARE_SERIAL

Uso de la función básica de CObject

  1. Use la sintaxis normal de C++ para derivar la clase de CObject (o de una clase derivada de CObject).

    En el ejemplo siguiente se muestra el caso más sencillo, la derivación de una clase de CObject:

    class CSimple : public CObject
    {
       // add CSimple-specific members and functions...
    };
    

Pero normalmente es posible que quiera invalidar algunas de las funciones miembro de CObject para controlar los detalles de la clase nueva. Por ejemplo, puede que normalmente quiera invalidar la función Dump de CObject a fin de proporcionar la salida de depuración para el contenido de la clase. Para obtener más información sobre cómo invalidar Dump, vea el artículo Personalización del volcado de objetos. También puede querer invalidar la función AssertValid de CObject para proporcionar pruebas personalizadas a fin de validar la coherencia de los miembros de datos de los objetos de clase. Para obtener una descripción sobre cómo invalidar AssertValid, vea ASSERT_VALID y CObject::AssertValid de MFC.

En el artículo Especificación de niveles de función se describe cómo especificar otros niveles de función, incluida la información de clases en tiempo de ejecución, la creación dinámica de objetos y la serialización.

Consulte también

Uso de CObject