Лекция: Файловая обработка объектов классов пользователя
Рассмотрим сериализацию данных классов пользователя.
Пусть создан новый класс пользователя СData. Включим в класс документа Clab4_2Doc объект нового класса DataObject:
Попытаемся выполнить все операции для сериализации. Проблема возникает в том, что нельзя воспользоваться функцией Serialize(). Придется запрограммировать процесс сериализации.
Общий принцип ООП состоит в том, что объект класса должен работать со своими собственными данными. Поэтому, необходимо добавить элемент-функцию Serialize () в новый класс.
Для сериализации данных класса пользователя необходимо выполнить следующие операции:
— Объявить класс, производный от CObject.
— В объявление класс включить макрос DECLARE_SERIAL (<имя класса>), служащий для включения дополнительных членов, которые необходимы для сериализации.
— Включить в реализацию класса (в файл CData.cpp) макрос IMPLEMENT_SERIAL. Этот макрос сопряжен с предыдущим: он обеспечивает реализацию сериализации. Три аргумента макроса – это имя класса, имя базового класса, номер схемы (1 или 0).
— Перегрузить функцию Serialize (), унаследованную от базового класса, т.е. добавить функцию Serialize () в класс пользователя.
//CData.h
сlass CData: public CObject
{//...
CString data;
DECLARE_SERIAL (CData) ;
…
void Serialize (CArchive& archive) ;
} ;
//CData.cpp
void CData :: Serialize (CArchive& archive) ;
{
CObject :: Serialize (archive); // Стандартный прием.
if (archive.IsStoring())
{
archive<<data; // data — элемент класса CData
}
else
{
archive>>data ;
}
}
IMPLEMENT_SERIAL (CData,CObject,0) ;
Для элементов класса CData сериализация выполнена.
Для выполнения сериализации объекта класса (в нашем примере это DataObject) следует вызвать функцию Serialize () класса CData внутри функции Serialize () документа, например,:
void Clab4_2Doc :: Serialize (CArchive& ar)
{
DataObject.Serialize(ar) ;
}
Цель работы — чтение и запись с диска не стандартных объектов MFC, объектов классов пользователя (лаб. работа lab4_2 – [7, c.43]). Пусть имеется собственный класс CData. Выполнить файловую обработку.
Для создания приложения lab4_2 выполнить этапы:
— Создание проекта lab4_2 (SDI-приложение),
— добавление нового класса в проект,
— ввод данных с клавиатуры,
— вывод текущего состояния документа,
— модификация собственного класса,
— создание новой версии Serialize() собственного класса,
— вызов Serialize нового класса внутри Serialize() документа.
Скомпилировать и протестировать приложение