Задание уровней функциональности
В этой статье описывается, как добавлять следующие слои функциональности в CObject- производного класса.
Данные класса среды выполнения
Динамическая поддержка создания
Поддержка сериализации
Для описания общих функций CObject см. в статье Производный класс от CObject.
Добавление данных класса среды выполнения
Создайте производный класс от CObject, как описано в статье Производный класс от CObject.
Используйте макрос DECLARE_DYNAMIC в объявлении класса, как показано ниже:
class CPerson : public CObject { DECLARE_DYNAMIC( CPerson ) // other declarations };
Используйте макрос IMPLEMENT_DYNAMIC в файле реализации (CPP) класса. Этот макрос принимает в качестве аргументов имя класса и его базового класса следующим образом.
IMPLEMENT_DYNAMIC( CPerson, CObject )
Примечание
Всегда кладите IMPLEMENT_DYNAMIC в файле реализации (CPP) для класса.Макрос IMPLEMENT_DYNAMIC должен быть вычисляется только один раз во время компиляции и не должен использоваться в файле (интерфейса. H), которое может потенциально может быть включен в несколько файлов.
Добавление динамической поддержки создания
Создайте производный класс от CObject.
Используйте макрос DECLARE_DYNCREATE в объявлении класса.
Определите конструктор без аргументов конструктора (по умолчанию).
Используйте макрос IMPLEMENT_DYNCREATE в файле реализации класса.
Добавление поддержки сериализации
Создайте производный класс от CObject.
Переопределить функцию-член Serialize.
Примечание
При вызове Serialize напрямую, то есть, то не требуется сериализовать объект через полиморфный указатель, опущен разделы от 3 до 5.
Используйте макрос DECLARE_SERIAL в объявлении класса.
Определите конструктор без аргументов конструктора (по умолчанию).
Используйте макрос IMPLEMENT_SERIAL в файле реализации класса.
Примечание
Точки «полиморфных указателя» к объекту класса (вызова его a) или на объект любого класса, производного от a (допустим, B).Для сериализации с помощью полиморфных указатель платформа должна определить класс объекта среды выполнения она выполняет сериализацию (B), поскольку может быть объектом любого производного класса из определенного базового класса (a).
Дополнительные сведения о том, как разрешить сериализацию при наследовании класса из CObject см. в статье Файлы в MFC и Сериализация.