Сериализация нестандартных объектов при работе с файлами (Лабораторная работа № 18 по VISUALC++ 2005)

Страницы работы

Содержание работы

Лабораторная работа №18  по VISUALC++ 2005

«Сериализация нестандартных объектов при работе с файлами »

1 Задание

Создать  и выполнить однодокументное  Windows-приложение на «родном» C++  с использованием библиотеки MFC.  Предусмотреть  создание пользователем нестандартного  т.е. собственного класса. В нем предусмотреть элемент данных типа CString.  В свою очередь, включить объект этого класса в качестве элемента данных в класс документа. Обеспечить  процесс сериализации документа.  То есть в конкретном случае нужно обеспечить чтение строки символов , запись её на диск и последующее  чтение из диска.

2 Общие указания

          Сериализация – процесс записи на диск или чтения из него.  В предыдущей лабораторной работе была рассмотрена  сериализация  объектов стандартных классов. Теперь предположим в проекте, названном My, мы создали свой собственный класс CDog, производный от  класса CObject.  В нем  элемент данных m_porodaи методы : vvod() – ввод  данных, vivod()вывод на экран, clear() – очистка экрана. Объект класса CDog  является элементом данных класса «Документ» (конкретно  созданного мастером класса  CMYDoc). Нужно обеспечить  процесс занесения документа на диск и чтения из него.

1) Создаем приложение My .

Create project. Тип проекта MFC, шаблон - MFC Application, Name – My. Single document. Выключить Use Unicode libraries.

2) Добавим в него класс Dog. Для этого в меню Project выбрать Add Class. В открывшемся окне выбрать категорию MFC  и шаблон MFC Class. Щелкнуть по Add. Раскроется диалоговое окно. Ввести Class name –CDog.  В строке Base Class  вместо уже имеющегося по умолчанию  базового класса CWnd  установить CObject. Следует заметить, что одновременно мастером создаются файлы Dog.h  и Dog.cpp ( без буквы «С» впереди).  Щелкнуть по Finish.

3) Включить  в класс CDog  элемент данных m_poroda и методы. Для этого  выбрать вкладку Class View, раскрыть папки My и  Classes, выделить класс CDog, вызвать контекстное меню и в нем  Add/ Add Variable.  В окне ввести  public: CString  m_poroda. Затем, вызывая Add/Add Function, вести методы класса CDog:

 void vvod(CString  ch)

{

m_poroda+=ch;

}

 void vivod (CDC*pDC)

{

pDC->TextOutA(0,10, m_poroda);

}

void clear()

{

m_poroda=””;

}

4) Включить в класс CMyDoc  элемент данных public: CDog  about_dog.  Нужно выделить класс CMyDoc и ввести  указанный элемент.

5) Теперь создадим обработчик OnChar() нажатия клавиши. Для этого выделить класс CMyView. В его properties раскрыть messages. Из раскрывшегося списка выбрать WM_CHAR, раскрыть список. В нем будет <Add>OnChar().  Щелкнуть на этой строке. В результате появится заготовка обработчика OnChar().

          Поскольку требуется ввести породу собаки, в функции OnChar() нужно вызвать метод vvod() класса |CDog. Для этого нужен объект этого класса. Такой объект есть. Это about_dog. Напомним, что он является элементом данных класса CMyDoc. А значит, чтобы его использовать, нужен указатель CMyDoc*pDoc. Адрес в него будет занесен с помощью функции GetDocument().

Текст  функции OnChar() приведен ниже.

void CMyView::OnChar(UINT nChar, UINT nRepCnt,

UINT nFlags)

{

    CMyDoc*pDoc=GetDocument();

    ASSERT_VALID(pDoc);

    if(!pDoc)

        return;

    pDoc->about_dog.vvod(CString((char)nChar));

Invalidate();//Не забывать!!!

    pDoc->SetModifiedFlag();//Для появления вопроса //сохранять или нетновые данные

// TODO: Add your message handler code here and/or call default

    CView::OnChar(nChar, nRepCnt, nFlags);

}

    Чтобы при выходе из программы появлялся вопрос  сохранять новые данные или нет, используется метод SetModifiedFlag().

    Для вывода на экран, как известно, используется функция OnDraw(). Выделим класс CMyView  и в нем - этот метод. Добавим в него строку вывода

      pDoc->about_dog.vivod(pDC);

Текст функции имеет вид:

void CMyView::OnDraw(CDC*pDC /*pDC*/)

{

    CMyDoc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);

    if (!pDoc)

        return;

    pDoc->about_dog.vivod(pDC);

    // TODO: add draw code for native data here

}

    При создании нового документа нужно очистить экран.

Для этого в имеющуюся заготовку метода OnNewDocument() класса CMyDoc нужно добавить две строки,выделенные курсивом.

BOOL CMyDoc::OnNewDocument()

{

    if (!CDocument::OnNewDocument())

Похожие материалы

Информация о работе

Тип:
Методические указания и пособия
Размер файла:
55 Kb
Скачали:
0