Полезно за вас: Речник | Игри | Новини | Фирми | Рецепти | Обяви
Начало на реферати

Създаване на собствени класове, поддържащи сериализация


Информационни технологии | 2009-12-04 | 123 сваляния

25 Създаване на собствени класове, поддържащи сериализация. Кога се налага пряко използване на Serialize().


Създаване на клас, поддържащ сериализация.

  • Новосъздаденият клас наследява CObject;

  • В декларацията на класа DECLARE_SERIAL( име на класа)

  • Предефинирвате Serialize() на базовия клас и сериализирате данновите членове на производния клас (ще поясним по-късно).

  • Подразбиращ се конструктор на класа.

  • В частта имплементация на класа IMPLEMENT_SERIAL

Конструктор по подразбиране това е конструктор без параметри. Когато класът поддържа сериализация този конструктор задължително трябва да го има. Донамичното създаване на обектиизползва винаги подразбиращият конструктор.

>> оператор за десериализиране, <<оператор за сериализиране.

Кога се използва Serialize().

  • При десериализиране на конструиран обект, не знаем името и сме заделили памет.

  • Ако обектът е сериализиран със Serialize() трябва да се десериализира със Serialize().

  • Ако създаваният клас има даннов елемент проявление или наследник на класа CОbject също се използва Serialize(), защото операциите << >> са дефинирани в CОbject да работят с указатели на обекти, а не с обекти.

  • Ако сериализираният клас има даннов елемент указател към Cоbject или негов наследник, тогава имаме 2 възможности 1. Първо трябва да се конструира данновият обект във функцията за сериализация и след това да се използва указателя. Използването става по 2 начина:

PObject // указател

  • PОbject ->Serialize();

  • ar>>m.mydata>>p.Object

IMPLEMENT_SERIAL този макрос иска три параметъра.

пример:

class CLine : public CObject

{ DECLARE_SERIAL (CLine)

protected: CPoint m_ptFrom;

CPoint m_ptTo;

public: CLine() {}

CLine( CPoint from, CPoint to) {m_ptFrom = from; m_ptTo = to;}

void Serialize (Carchive& ar ); };

като дефинирате ф-ията Serialize така:

void CLine::Serialize( CArchive& ar)

{ CObject::Serialize( ar);

if ( ar.IsStoring()) ar << m_ptFrom << m_ptTo;

else ar >> m_ptFrom >> m_ptTo;

}

добавяте и някъде в имплементацията:

IMPLEMENT_SERIAL( CLine, CObject, 1)

IMPLEMENT_SERIAL( CLine, CObject, 1 | VERSIONABLE_SCHEMA)

В примера са спазени всички правила за сериализация описани по-горе.


26 Версии при сериализация. Работа с указатели към обекти и проблеми при използване на псевдоними на обекти при сериализация.


Когато работим с различни версии ни трябва да предвидим код в Serialize().Интересна е и още една особеност: Предефинирането работи за указатели към такива обекти-наследници, а не за самите обекти. Така че:


CLine* pLine = new CLine( CPoint( 0,0), CPoint( 40,40));

ar << pLine; //работи добре


CLine line( CPoint( 0,0), CPoint( 40,40));

ar << line; // няма да работи

Aко искаме да сериализираме по стойност, а не по указател, е добре така:


CLine line( CPoint( 0,0), CPoint( 40,40));

ar << &line; // ще работи за сериализация


при десериализация:

CLine* pLine;

ar >> pLine; //всичко е добре

CLine line = *pLine; // операция = е предеф. в CLine като копиране

delete pLine; // вече ненужен

Създаване на собствени класове, поддържащи сериализация

Добави своя коментар:



Тагове от реферата: , , ,

Изтегли в DOC | PDF | ZIP

Подобни материали


Работа с MySQL (съхранение на данните в база данни) Информационни технологии | 2010-11-19 | 97 прочитания
Паралелни процеси взаимодействие. Взаимно изключване програмно решение Информационни технологии | 2010-11-19 | 146 прочитания
БАЗИ ДАННИ 1 Информационни технологии | 2010-11-19 | 48 прочитания
Еволюция и класификация на ОС Информационни технологии | 2010-11-19 | 149 прочитания
Модели на естествения език Информационни технологии | 2010-11-19 | 32 прочитания
Стартиране на WINDOWS. Работен екран - Desktop. Лента на заданията - Task bar. Бутон Start. Изход от WINDOWS Информационни технологии | 2010-11-19 | 100 прочитания
Дистрибуционна политика Информационни технологии | 2010-11-19 | 43 прочитания
Архитектура на типов опростен микропроцесор. Основни характеристики на микропроцесорите Информационни технологии | 2010-11-19 | 172 прочитания
Компютърни вируси и антивирусни програми Информационни технологии | 2010-11-19 | 92 прочитания
Електорнен подпис - същност и видове Информационни технологии | 2010-11-19 | 228 прочитания