Лекция: Проектирование абстракции данных
В задаче удобно определить 6 объектов – классов. Пусть класс контейнера списка именуется TList, класс базового итератора — TListBasicIterator, классы-наследники базового итератора – TArrayIterator, TLineIterator, TReverseIterator, а класс исключений – TListException. Кроме того реализуется структура Elem, представляющая конкретный элемент списка и имеющая поле row, которое носит смысловой характер, и поле next, которое является указателем на следующий элемент.
Класс TList имеет поля first и cur, которые являются указателями на начальный и текущий элементы списка соответственно, поскольку список характеризуется головным элементом и указателем, перемещающимся по списку.
Класс TListBasicIterator содержит поля basic_cur и basic_first, являющиеся указателями на текущий и начальный элементы соответственно. Данный класс позволяет работать с элементами контейнера, не влияя на элементы и указатели контейнера.
Класс TArrayIterator не имеет полей, а только методы, реализующие индексирование элементов и подсчета длины списка.
Класс TLineIterator имеет поля first и cur, которые являются указателями на начальный и текущий элементы списка соответственно. Этот класс реализует операции для работы с контейнером как со списком.
Класс TReverseIterator имеет поля first и cur, которые являются указателями на начальный и текущий элементы списка соответственно. Данный итератор работает со списком в обратном порядке, т.е. поле first указывает на последний элемент контейнера, а движение указателя происходит в сторону начального элемента контейнера.
Класс TListException имеет поля errmsg и errnum типа char* и int соответственно, носящими информацию о текущей исключительной ситуации (текст и код ошибки).