logo search
Конспект по ООПиП ч

Создание класса, обеспечивающего сериализацию данных

Библиотека классов MFC определяет механизм записи и восстановления объектов (serialization), причем поддержка этого механизма осуществляется средствами класса CObject.

Классы, наследованные от CObject, также могут обеспечивать работу механизма записи и восстан-я объектов. Для этого при объявл-и класса надо указать макрокоманду DECLARE_SERIAL, а при определении - макрокоманду IMPLEMENT_SERIAL.

Макрокоманду DECLARE_SERIAL необходимо поместить в описании класса в заголовочном файле. В качестве параметра макрокоманды надо указать имя класса

DECLARE_SERIAL (имя_класса)

Макрокоманду IMPLEMENT_SERIAL следует указать перед упоминанием класса в файле исходного текста приложения. Прототип макрокоманды IMPLEMENT_SERIAL представлен ниже:

IMPLEMENT_SERIAL(имя_класса,имя_баз_класса,номер_версии)

имя_класса определяет имя класса, имя_базового_класса - имя базового класса, из кот-го непосредственно наследуется класс. Последний параметр номер_версии - это число типа UINT, определяющее версию программы.

В классе должны быть определены специальные методы для записи и восстановления состояния объектов этого класса..

Методы, сохраняющие и восстанавл-е объекты, взаимод-т с объектом класса CArchive, кот-й осуществляет непосредственную запись и чтение информации из файла на диске.

Класс CObject содержит виртуальный метод Serialize, отвечающий за запись и чтение объектов классов, наследованных от класса CObject: virtual void Serialize(CArchive& ar);

В качестве параметра ar методу передается указатель на объект класса CArchive, использ-й для записи и восстан-я состояния объекта класса CObject (или наследуемого от него класса). Чтобы узнать, какую операцию д.выполнить метод Serialize, необходимо воспольз-ся методами IsLoading или IsStoring класса CArchive.

Итак, при создании нового класса, в котором метод Serialize применяется для сериализации данных, необходимо:

1) Чтобы класс был произв-м от класса CObject или его потомков.

2) При объявлении класса необходимо вставить макрокоманду DECLARE_SERIAL.

3)Определить в классе функцию Serialize, отвечающую за хранение переменных класса.

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

5) Объявить в классе деструктор.

6) При реализации класса в начало файла реализации вставить макрос IMPLEMENT_SERIAL. У этой макрокоманды три парам-ра: имя класса, имя базового класса и номер версии формата файла, хранящего документ. Можно иметь несколько модификаций документа и с каждой из них связать свою версию.

Шаблон (заготовка) файлов определения и реализации класса, который обеспечивает процесс сериализации данных

// фрагмент файла определения класса

class CMyDoc:public CObject

{ DECLARE_SERIAL(CMyDoc)

protected: virtual void Serialize(CArchive& ar);

protected: CMyDoc();

protected: ~CMyDoc();

// другие описания класса . . . };