ВУЗ:
Составители:
Рубрика:
class slist_iterator /*-итератор циклического односвязного*/
/* списка: */
{ slink* ce;/*-указатель очередного элемента списка;*/
slist* cs;/*-указатель итерируемого списка; */
public:
slist_iterator(slist& s) /*-конструктор: */
{cs=&s;ce=cs->last;}
ent operator()()/*-операция итерирования; */
{ ent ret=ce?(ce=ce->next)->e:0;
if(ce==cs->last)ce=0;/*-конец списка*/
return ret;/*-поле данных или нуль; */
}
};/*-конец определения итератора списка элементов; */
Из класса slist можно получать списки тех объектов,которые
представляют интерес в конкретной программе.Например,для
списка строк символов мы можем построить следующий производ-
ный класс:
struct nlist:slist /*-класс для списка строк знаков; */
{ void insert(char* a) {slist::insert(a);}
void append(char* a) {slist::append(a);}
char* get() { return "ABCDE"; }
nlist(char* a):slist(a) {}
};/*-конец определения призводного класса nlist; */
Функции нового класса или наследуются от slist непосредст-
венно(например,функция clear()),или ничего не делают,кроме
преобразования типа.Класс nlist - это ничто иное,как альтер-
нативный интерфейс класса slist.Так как на самом деле тип
ent есть void*,нет необходимости явно преобразовывать указа-
тели char*,которые используются в качестве фактических пара-
метров.Поиск требуемой строки в списке реализуется следую-
щей функцией:
int find(nlist* spisok,char* stroka)
{ slist_iterator tek_stroka(*(slist*)spisok);
62
class slist_iterator /*-итератор циклического односвязного*/ /* списка: */ { slink* ce;/*-указатель очередного элемента списка;*/ slist* cs;/*-указатель итерируемого списка; */ public: slist_iterator(slist& s) /*-конструктор: */ {cs=&s;ce=cs->last;} ent operator()()/*-операция итерирования; */ { ent ret=ce?(ce=ce->next)->e:0; if(ce==cs->last)ce=0;/*-конец списка*/ return ret;/*-поле данных или нуль; */ } };/*-конец определения итератора списка элементов; */ Из класса slist можно получать списки тех объектов,которые представляют интерес в конкретной программе.Например,для списка строк символов мы можем построить следующий производ- ный класс: struct nlist:slist /*-класс для списка строк знаков; */ { void insert(char* a) {slist::insert(a);} void append(char* a) {slist::append(a);} char* get() { return "ABCDE"; } nlist(char* a):slist(a) {} };/*-конец определения призводного класса nlist; */ Функции нового класса или наследуются от slist непосредст- венно(например,функция clear()),или ничего не делают,кроме преобразования типа.Класс nlist - это ничто иное,как альтер- нативный интерфейс класса slist.Так как на самом деле тип ent есть void*,нет необходимости явно преобразовывать указа- тели char*,которые используются в качестве фактических пара- метров.Поиск требуемой строки в списке реализуется следую- щей функцией: int find(nlist* spisok,char* stroka) { slist_iterator tek_stroka(*(slist*)spisok); 62
Страницы
- « первая
- ‹ предыдущая
- …
- 60
- 61
- 62
- 63
- 64
- …
- следующая ›
- последняя »