Класс TBasicIterator (базовый итератор) — КиберПедия 

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Класс TBasicIterator (базовый итератор)

2020-04-01 92
Класс TBasicIterator (базовый итератор) 0.00 из 5.00 0 оценок
Заказать работу

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

Также класс имеет поля basic_cur и basic_first, указывающие на текущий и последний элементы списка соответственно. Поле basic_first указывает на тот же элемент, что и поле first класса TList, однако basic_cur не совпадает с указателем cur класса TList, что показывает независимость итератора от контейнера.

Класс TArrayIterator (итератор массива)

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

Кроме того, реализуется оператор индексирования элементов и метод Count для подсчета числа элементов списка. Данные методы позволяют работать со списком как с массивом.

Класс TLineIterator (итератор прямого обхода)

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

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

Еще список имеет поля cur и first, указывающие на текущий и головной элементы списка.


Класс TReverseIterator (итератор обратного обхода)

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

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

Еще список имеет поля cur и first, указывающие на текущий и головной элементы списка.

Особенность данного итератора состоит в том, что он позволяет работать со списком в обратном порядке: головным элементом становится последний элемент списка, а движение происходит в направлении от последнего к начальному элементу контейнера.

Класс TListException (класс исключений)

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

Класс имеет поля errmsg и errnum типа char* и int соответственно, носящими информацию о текущей исключительной ситуации (текст и код ошибки), и методы GetMessage и GetCode для дальнейшей обработки ошибки в зависимости от ситуации. Еще в классе реализована операция вывода информации об ошибке в поток.

Определение отношений между классами

Класс TBasicIterator является базовым для классов TLineIterator, TReverseIterator и TArrayIterator, поскольку каждый производный класс является конкретным частным случаем базового итератора.

Также класс TBasicIterator является дружественным для класса TList, так как он должен иметь доступ к элементам контейнера. Здесь будет применяться агрегация с классом TList, поскольку оба класса самостоятельны, но TBasicIterator содержит поле типа TList.

Между классами TList и TListException используется отношения использования: класс TList использует класс TListException для работы с исключительными ситуациями.

На рисунке 1 приведена диаграмма классов.

 

Рисунок 1 - Диаграмма классов


Глава 2. Реализация

Для решения поставленной задачи я использовал язык программирования C++. Программа разработана в среде Microsoft Visual Studio 2012, консольное приложение Win32. Операционная система Windows 7.

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

Каждый класс состоит из двух файлов: интерфейсной части - «ClassName.h» и реализационной - «ClassName.cpp».

 

Реализация класса TList

template<typename T>TList

{TListBasicIterator<T>;:<T>* first;<T>* cur;<T>& CreateFirst(T val);:operator=(const TList<T>&);(const TList<T>&);isEmpty();isEnd();& Rewind();& Set(T val);Get();& Next();& InsertAfterCurrent(T val);& AddLast(T val);& DeleteCurrent();(void);

~TList(void);ostream& operator<<(ostream& os, TList<T>& li)

{(li.isEmpty())

{<< "Empty";os;

}.Rewind();(!li.isEnd())

{<< li.Get() << " ";.Next();

}.Rewind();os;

}

};

 


Поделиться с друзьями:

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.005 с.