Иллюстрированный самоучитель по Visual Studio.Net

Тарифные планы компании Ritm-Z, аутсорсинг тарифы. | Литеры для маркировки купить по материалам http://gravmos.ru. | На сайте mikrozaym2you.ru займ онлайн на карту срочно без отказа круглосуточно. | именная поздравительная вышивка на заказ:Креативная Штуч. | Юридическая консультация также читайте. |

Класс CPolygon - часть 4


Просмотрите почти пустое тело функции Serialize в классе документа. Оно, тем не менее, намекает нам, как разделяются две разновидности общения с архивом. Вызов функции CArchive::IsStoring() возвращает ненулевое значение в случае, если архив используется для записи данных.

Новый класс CPolygon должен иметь родителя CObject, с тем чтобы он мог воспользоваться его мощным оружием — сериализацией. При этом в объявлении класса должен присутствовать макрос:

DECLARE_SERIAL(CPolygon)

который влечет свое продолжение — другой макрос

IMPLEMENT_SERIAL(CPolygon, CObject, 1)

Последний должен быть расположен в файле реализации класса. Третий параметр (wSchema) этой макроподстановки задает номер версии приложения. Номер схемы кодируется и помещается в архив вместе с другими сохраняемыми данными. Это позволяет корректно обойтись в такой ситуации.

Предположим, что имеются файлы с расширением mgn, в которых хранятся данные о магнитах, созданных нашим приложением. Затем допустим, что мы внесли изменения в коды приложения и добавили в класс CPolygon еще одно какое-то поле данных. Теперь, записывая данные в архив (файл), также получим файл с расширением mgn, но другого формата. После этого мы не сможем правильно читать старые файлы. Если не предпринять никаких мер, то данные будут прочитаны неверно, а это часто приводит к непредсказуемому поведению программы. Механизм версий справляется с этой проблемой, но вы не должны забывать вовремя менять номер версии. При каждом изменении в структуре сохраняемых данных следует изменять номер версии. При попытке прочитать файл, соответствующий другой версии, каркас приложения просто выдаст сообщение о несовпадении версий и закроет файл данных.

С учетом сказанного рассмотрим, как должна выглядеть реализация нового класса. Следующие функции и макросы необходимо поместить в начало файла TreeDoc.cpp, после директив препроцессора:

IMPLEMENT_SERIAL(CPolygon, CObject, 1)

//====== Конструктор по умолчанию

CPolygon::CPolygon()

{

m_pDoc = 0; // Пока не знаем обратного адреса

MakeStar(); // Зададим полигон в виде звезды

}




Начало  Назад  Вперед