Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sem4-.doc
Скачиваний:
2
Добавлен:
13.08.2019
Размер:
92.67 Кб
Скачать
  1. Задание * (лаб. Раб. №4)

На прошлом занятии была написана система классов наследников от класса Command, реализующая вычислительный алгоритм. Сегодня предлагается реализовать сохранение таких алгоритмов в файл и загрузку из файла. Для сохранения/загрузки каждого конкретного объекта, необходимо в классах сделать виртуальные методы store и load. Можно пользоваться файловым потоком fstream или библиотекой для работы с файлами из <stdio.h> (fopen, fread, fwrite, fclose).

Для идентификации классов предлагается ввести enum, например:

enum Types { Command, Plus, … },

либо их строковые обозначения, например:

“Command”, “Plus”,

и сделать у каждого класса виртуальный метод, который возвращал бы его идентификатор. Также можно пользоваться GUID (для тех, кто знает, что это такое).

Предполагаемый алгоритм сохранения системы:

  1. Записать в файл количество классов.

  2. Для каждого класса записать в файл его идентификатор, а затем вызвать его виртуальный метод store, который сохранит его параметры.

Предполагаемый алгоритм загрузки системы:

  1. Из файла читается количество классов.

  2. Для каждого класса читается его идентификатор, далее возможны варианты

    1. По идентификатору-числу (из enum) делается switch, либо по идентификатору-строке делается if-elseif и создаётся экземпляр нужного класса.

    2. Заранее заведена так называемая фабрика классов – массив, в котором содержится по одному экземпляру каждого класса (пустышки). У каждого класса есть виртуальный метод, который создаёт экземпляр класса такого же типа, как и он сам. По считанному идентификатору в фабрике находится нужная пустышка и с её помощью создаётся новый экземпляр класса. Для идентификаторов-чисел можно сразу обращаться к нужному элементу массива. Для идентификаторов-строк можно пользоваться хеш-таблицами либо последовательным поиском.

  3. Для созданного экземпляра класса вызывается виртуальный метод load, который инициализирует его поля.

  4. Загруженный алгоритм можно исполнять.

  1. Дать описание классов, созданных в файлах: Array.H, Array.Cpp

12.1. Исходный код файла Array.H (лаб. Раб. №5)

#ifndef _MCC_Dimarius_Array

#define _MCC_Dimarius_Array

typedef void* pvoid;

typedef unsigned int uint;

class Array {

void **data;

static const pvoid DUMMY;

uint userlen, length;

void changeSize(uint newSize);

public:

uint delta;

// __declspec(property(get = GetSize, put = SetSize)) uint len;

uint GetSize() { return userlen; }

void SetSize(uint newSize);

Array(uint Delta = 1, uint Count = 0);

~Array();

Array &Insert(pvoid whatToAdd, uint whereAdd);

int Add(pvoid whatToAdd);

Array &operator << (pvoid whatToAdd);

Array &operator >> (pvoid *whatToGet);

void clear() { changeSize(0); userlen = 0; }

void Remove(uint n);

void DelNULL();

void Sort(bool (*comp)(const void *o1, const void *o2));

void FastSort(bool (*comp)(const void *o1, const void *o2));

int Find(const void *o, bool (*comp)(const void *o1, const void *o2));

int FindInSorted(const void *o, int (*comp)(const void *o1, const void *o2));

pvoid &operator [](uint index);

};

#endif

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]