Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 las discusiones 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 . El archivo H) contiene la declaración de clase y cualquier otra información necesaria para usar la clase . Archivo de implementación (o archivo .CPP) contiene la definición de la 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. Sin embargo, para algunas clases pequeñas que no se compartirán entre 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 funcionalidad 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.
Funcionalidad básica junto con compatibilidad con información de clases en tiempo de ejecución y 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 clases 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 funcionalidad mediante macros de declaración e implementació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 que se usan 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<< |
|---|---|---|---|
Funcionalidad básica CObject |
No | No | No |
DECLARE_DYNAMIC |
Sí | No | No |
DECLARE_DYNCREATE |
Sí | Sí | No |
DECLARE_SERIAL |
Sí | Sí | Sí |
Para usar la funcionalidad básica de CObject
Use la sintaxis normal de C++ para derivar la clase de
CObject(o de una clase derivada deCObject).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 de cómo invalidar AssertValid, vea MFC ASSERT_VALID y CObject::AssertValid.
En el artículo Especificar niveles de funcionalidad se describe cómo especificar otros niveles de funcionalidad, incluida la información de clase en tiempo de ejecución, la creación dinámica de objetos y la serialización.