440____________________Часть III. Современное программирование на C++
cout « "После изменения рейтинга:" « endl;
WriteStudents(students);
students.Flush(); // уничтожение элементов return 0;
}
void ChangeGrade(STUDENT &s, void *change) { s.SetGrade(s.GetGrade() + *(float*)change);
// Сохранение правильных рейтингов if (s.GetGradeO < 0.0)
s.SetGrade(O.O) ;
else if (s.GetGradeO > 4.0)
s.SetGrade(4.0);
} -.
void WriteStudents(STUDENT_CONTAINER sstudents) • {
STUDENT_CONTAINER_ITERATOR iterator(Students); •
STUDENT *s;
cout « setiosflags(ios::fixed) « setprecision(l) ;
while (s = iterator++)
cout « " " « s->Get!d() « " " « s->GetGrade() « endl;
}
Специальные классы BIDS
В дополнение к контейнерам и итераторам из ADT и FDS следует отметить еще несколько классов. Класс TShouldDelete обсуждался с разделе "Принадлежность контейнеров". Он поддерживает владение объектами косвенного класса с помощью функции-члена OwnsElements.
Другая группа классов используется для реализации контейнеров типа словарь. Они называются ассоциативными классами (association classes) и имеют имена вида т [suffix] Association. Суффикс (suffix) определяет характеристики ассоциативного класса таким же образом, как суффиксы м и i для имен контейнеров из ADT и FDS. Ассоциативные классы будут детально описаны в разделе, посвященному словарям.
Контейнеры BIDS используют для наследования классы нижнего уровня, которые реализуют основные функции для контейнеров такого типа. Имена классов нижнего уровня оканчиваются суффиксом imp, например, TArrayAsVectorimp. Эти классы предназначены только для внутреннего потребления, но изучение их программного кода может облегчить изучение контейнеров. Заметим, что имена всех контейнеров FDS, а также их заголовочных файлов заканчиваются на imp.
Контейнеры типа список связей и двунаправленный список используют класс, который обеспечивает хранение объектов любого типа. Для этих спи-