Статья: Альтернативные Интерфейсы

else if (find(&members,n))

error("friend redeclared as member");

else

friends.append(n);

}

if (n->is_operator()) operators.append(n);

// ...

}

где is_iterator() и is_friend() являются функциями членами класса name. Фукнцию find() можнонаписатьтак:

int find(nlist* ll, name* n)

{

slist_iterator ff(*(slist*)ll);

ent p;

while ( p=ff() ) if (p==n) return 1;

return 0;

}

Здесь применяется явное преобразование типа, чтобы применить slist_iterator к nlist. Более хорошее решение, - сделать итератор для nlist"ов. Печатать nlist может, например, такая функция:

void print_list(nlist* ll, char* list_name)

{

slist_iterator count(*(slist*)ll);

name* p;

int n = 0;

while ( count() ) n++;

cout << list_name << "\n" << n << "members\n";

slist_iterator print(*(slist*)ll);

while ( p=(name*)print() ) cout << p->string << "\n";

}

Обработка Ошибок

Есть четыре подхода к проблеме, что же делать, когда во время выполнения общецелевое средство вроде slist сталкивается с ошибкой (в C++ нет никаких специальных средств языка для обработке ошибок):

Возвращать недопустимое значение и позволить пользователю его проверять;

К-во Просмотров: 431
Бесплатно скачать Статья: Альтернативные Интерфейсы