Поделиться через


Задание уровней функциональности

В этой статье описывается, как добавить следующие уровни функциональности в класс, производный от CObject:

  • Сведения о классе во время выполнения

  • Поддержка динамического создания

  • Поддержка сериализации

Общее описание функциональных возможностей см. в статье о производных CObject классах от CObject.

Добавление сведений о классе во время выполнения

  1. Наследуйте класс из CObjectстатьи CObject, как описано в статье "Производный класс".

  2. Используйте макрос DECLARE_DYNAMIC в объявлении класса, как показано ниже:

    class CPerson : public CObject
    {
       DECLARE_DYNAMIC(CPerson)
    
       // other declarations
    };
    
  3. Используйте макрос IMPLEMENT_DYNAMIC в файле реализации (). CPP) класса. Этот макрос принимает в качестве аргументов имя класса и его базовый класс, как показано ниже.

    IMPLEMENT_DYNAMIC(CPerson, CObject)
    

Примечание.

Всегда помещайте IMPLEMENT_DYNAMIC в файл реализации (. CPP) для класса. Макрос IMPLEMENT_DYNAMIC должен оцениваться только один раз во время компиляции и поэтому не должен использоваться в файле интерфейса (). H) которые могут быть включены в несколько файлов.

Добавление поддержки динамического создания

  1. Производный класс от CObject.

  2. Используйте макрос DECLARE_DYNCREATE в объявлении класса.

  3. Определите конструктор без аргументов (конструктор по умолчанию).

  4. Используйте макрос IMPLEMENT_DYNCREATE в файле реализации класса.

Добавление поддержки сериализации

  1. Производный класс от CObject.

  2. Переопределите функцию-член Serialize .

    Примечание.

    Если вы вызываете Serialize напрямую, то есть не хотите сериализовать объект с помощью полиморфного указателя, опустите шаги 3–5.

  3. Используйте макрос DECLARE_SERIAL в объявлении класса.

  4. Определите конструктор без аргументов (конструктор по умолчанию).

  5. Используйте макрос IMPLEMENT_SERIAL в файле реализации класса.

Примечание.

"Полиморфный указатель" указывает на объект класса (называется A) или объект любого класса, производный от A (например, B). Для сериализации с помощью полиморфного указателя платформа должна определить класс времени выполнения объекта, который он сериализует (B), так как он может быть объектом любого класса, производного от некоторых базовых классов (A).

Дополнительные сведения о том, как включить сериализацию при наследовав классе, CObjectсм. в статьях "Файлы" в MFC и сериализации.

См. также

Наследование класса от CObject