Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Интересное:
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2020-04-01 | 95 |
5.00
из
|
Заказать работу |
|
|
Данный класс имеет единственный конструктор, получающий на вход константную ссылку на контейнер списка, и виртуальную функцию 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!