Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по Visual C++ (MFC, платформа .NET)


Информационный Канал Subscribe.Ru

Уроки по Visual C++.NET. Рассылки сайта progs.biz
Рассылка № 81
 
Начало > Visual C++.NET > MFC > Урок 33

Разработка WEB-сервисов XML и серверных компонентов на Visual Basic.NET и Visual C#.NET.
Разработка WEB-сервисов XML и серверных компонентов на Visual Basic.NET и Visual C#.NET
Заказать на Озоне

Подробнее


Полные версии уроков (с картинками): урок 33.

Visual C++.NET
Урок 33. Сериализация класса со списком

На уроке 29 мы смотрели, как можно сериализовать собственный класс. На этом уроке мы посмотрим реализацию сериализации собственного класса на частном примере - а именно, на примере класса со списком. В списке, понятное дело, может быть достаточно много элементов и нам надо сериализовать их все, сколько бы их там не было - 1 или 123.

Наша программа будет устроена следующим образом - у нас будет класс со списком CBin, в котором будет переменная m_List типа CPtrList. В этот список m_List мы будем добавлять новые элементы - это будут указатели на класс CData. Сам класс CData будет достаточно простой - в нем будет только две переменные. В классе документа у нас будет объявлена переменная m_Bin типа CBin. Сериализация будет осуществляться так - в классе CBin мы объявим и напишем метод Serialize, который мы и будем вызывать в одноименном методе класса документа.

Создайте новый SDI-проект (все остальные параметры заготовки, предлагаемой мастером, можно оставить без изменений).

Добавьте в ваш прект класс CData для данных, хранящихся в элементах списка. Его заголовочный файл будет выглядеть так:

class CData  
{
public:
    CData();
    virtual ~CData();
    //Данные класса.
    CString m_sData;
    int m_nData;
};

Теперь добавьте в проект класс CBin, заголовочный файл для которого будет выглядеть так:

class CBin : public CObject
{
public:
    //Наш список.
    CPtrList m_List;
    //Функция сериализации.
    void Serialize(CArchive& ar);
    CBin();
    virtual ~CBin();
};

В файле реализации же для класса CBin метод Serialize будет таким:

void CBin::Serialize(CArchive &ar)
{
  int n;
  int nData;
  if (ar.IsStoring())
  {
    //Записываем количество элементов в списке.
    n=m_List.GetCount();
    ar<<n;
    //Берем начало списка.
    POSITION pos = m_List.GetHeadPosition();
    //Пробегаем по всему списку.
    while(pos!=NULL){
      CData *pData=(CData*)m_List.GetNext(pos);
      ar<<pData->m_nData;
      ar<<pData->m_sData;
    }
  }
  else{
    //Читаем количество элементов в списке.
    ar>>n;
    //Получаем все элементы списка.
    for(int i=0; i<n; i++){
      CData *data = new CData;
      ar>>data->m_nData;
      ar>>data->m_sData;
      m_List.AddTail(data);
    }
  }
}

Т. е мы тут действуем так - сначала мы записываем в файл (архив) количество элементов в списке, а потом и сами элементы. Читаем же скачала число элементов, потом - сами элеметы. Так мы делаем, например, вот почему - дело в том, что в методе Serialize класса документа после сериализации нашего класса CBin мы можем сериализовать и данные из класса документа. Поэтому мы должны при чтении из архива знать, сколько данных относится к списку, а сколько - к самому документу.

Практически все мы уже сделали. Теперь класс документа. Во-первых, в нем надо объявить переменную типа CBin:

  CBin m_Bin;

И, во-вторых, добавить стандартный код для сериализации в классе документа:

void CList_serDoc::Serialize(CArchive& ar)
{
  //Сериализация класса со списком.
  m_Bin.Serialize(ar);
  if (ar.IsStoring())
  {
    // TODO: add storing code here
  }
  else
  {
    // TODO: add loading code here
  }
}

Все! Теперь у нас есть класс CBin со списком и этот класс можно сериализовывать.

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru


Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2004 сайт progs.biz
© 2002-2004 Алексеев Игорь

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.lessonsfromai
Отписаться

В избранное