Разработка интерфейса для объединения в структуру данных множества объектов различных классов

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

Фрагмент текста работы

Внутри каждого их низ переопределяются методы загрузки объекта из текстовой строки, выгрузки объекта в текстовую строку в динамической памяти, добавления объекта в последовательный двоичный файл, чтения объекта из последовательного двоичного файла, возврата уникального идентификатора класса, возврата указателя на строку с именем класса, сравнения двух объектов, “сложения “(объединения) двух объектов, создание динамической копии объекта. Работа методов организованной структуры основана на виртуальных функциях работы с данными классами. В качестве примера в программе используются два класса: класс строк и класс целых чисел.

Функциональное описание

Переопределенный оператор ():

int operator()(object&,int)

Переопределенный оператор () помещает указатель на элемент (ФП1) по заданному логическому номеру (ФП2). Пред вставкой вызывается служебный метод extend(), который при переполнении массива указателей перераспределяет память, удваивая размерность массива указателей. При логическом номере элемента, меньшем нуля или больше текущего числа элементов подпрограмма возвращает нуль. В противном случае - происходит вставка с «раздвижкой», проиллюстрированная выше.

Служебный метод для отслеживания и ликвидации переполнения.

int extend()

Данная функция проверяет текущее число элементов в массиве указателей и сравнивает его с максимально допустимым. При переполнении максимально допустимая размерность удваивается путем копирования указателей текущего массива в новый, с удвоенной размерностью, освобождения текущего и обмена указателями на первый элемент.

Функция добавления элемента в конец массива:

void insend(object&)

В функцию передается указатель на объект, производный от абстрактного класса. При включении проверяем массив указателей на переполнение, помещаем указатель на объект в конец массива и наращиваем число элементов.

Функция освобождения памяти:

int free_mem()

При удалении элементов возможно уменьшение их до числа, в 2 раза меньше максимально допустимой размерности. Эта ситуация отслеживается  данной функцией и в такой ситуации создаётся новый массив указателей в 2 раза меньшей максимальной размерности, в который переносятся указатели из текущего. После чего происходит освобождение памяти, занимаемой текущим и обмен «головными» указателями.

Функция добавления строки:

int put_str()

При вызове функции создаётся временный указатель на объект абстрактного класса,  строка размерностью 200 символов (принципиального ограничения нет) и массив указателей, размерностью 21 (ограничение размера названия класса). В цикле происходит добавление строки поэлементно - от первого столбца к последнему: с помощью массива ids[] определяем объект какого класса должен быть помещен в данный момент (tmp=object::objects[ids[i]]->Copy()). Определяем имя класса текущего объекта и выводим его в качестве подсказки вместе с номером столбца, соответствующего этому объекту. Введённую строку с помощью метода load_str(char*), определенного в базовом абстрактном классе и переопределенного в производном, преобразуем к типу текущего объекта. После чего происходит обращение к служебному методу insend(object&

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

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