09.04.2016 Views

Priemioop

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Правописание и расстановка переносов<br />

Рис. 2. 13. Класс Iterator и его подклассы<br />

Iterator и несколько его подклассов. Обратите внимание, что мы добавили<br />

в интерфейс класса Glyph абстрактную операцию Createlterator для поддержки<br />

итераторов.<br />

Интерфейс итератора предоставляет операции First, Next и IsDone для<br />

управления обходом. В классе Listlterator реализация операции First указывает<br />

на первый элемент списка, a Next перемещает итератор на следующий элемент.<br />

Операция IsDone возвращает признак, говорящий о том, перешел ли указатель<br />

за последний элемент списка. Операция Cur rent It em разыменовывает<br />

итератор для возврата глифа, на который он указывает. Класс Array Iterator<br />

делает то же самое с массивами глифов.<br />

Теперь мы можем получить доступ к потомкам в структуре глифа, не зная ее<br />

представления:<br />

Glyph* g;<br />

Iterator* i = g->CreateIterator();<br />

for (i->First(); !i->IsDone(); i->Next()) {<br />

Glyph* child = i->Current!tem();<br />

}<br />

// выполнить действие с потомком<br />

Createlterator по умолчанию возвращает экземпляр Nulllterator.<br />

Nulllterator - это вырожденный итератор для глифов, у которых нет потомков,<br />

то есть листовых глифов. Операция IsDone для Nulllterator всегда возвращает<br />

истину.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!