Задание уровней функциональности
В этой статье описывается, как добавить следующие уровни функциональности в класс, производный от 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 и сериализации.