6.Контейнерные классы.pptx
- Количество слайдов: 23
6. Контейнерные классы
6. 1. Отношения между классами Отношение части Класс1 ЕСТЬ ЧАСТЬ Класса 2 Отношение разновидности Класс1 ЕСТЬ НЕКОТОРЫЙ Класс2 Лепесток ЕСТЬ ЧАСТЬ цветка Роза ЕСТЬ НЕКОТОРЫЙ цветок 2
6. 2. Контейнерный класс Определяет агрегатный тип, состоящий из экземпляров других типов Класс2 целое ЕСТЬ ЧАСТЬ n Класс1 часть Точка ЕСТЬ ЧАСТЬ окружности 3
6. 2. Контейнерный класс (продолжение) Примеры: Окружность Прямоугольник ЕСТЬ ЧАСТЬ 1 Точка 2 Точка 4
6. 3. Диаграмма классов Класс2 атрибуты2 имя: Класс1[1. . n] операции 2 n Класс1 атрибуты1 операции 1 5
6. 3. Диаграмма классов (продолжение) Точка ЕСТЬ ЧАСТЬ окружности Circle -center: Point -rad: double center . . . методы Circle rad center. f(…) 1 Point -x: double -y: double x y методы f(…) Point +f(. . . ) 6
6. 4. Класс Point 7
6. 5. Класс Circle 8
6. 6. Тестирование классов Point p 1, p 2(1); Circle c 1(1), c 2(p 2); double d; d = p 1. distance(p 2); d = c 1. distance(c 2); d = c 1. distance(p 2); d = p 1. distance(c 2); 1. 41421 Error: 'Point: : distance' : cannot convert parameter 1 from 'Circle' to 'const Point &‘ 9
6. 7. Понятие итератора Итераторы – методы, предоставляющие последовательный доступ к каждому элементу в состоянии экземпляра контейнерного класса Прикладная программа . . . Экземпляр контейнерного класса 10
6. 7. Понятие итератора (продолжение) Класс2 1 атрибуты2 имя: Класс1[1. . n] Класс-итератор * операции 2 n Класс1 атрибуты1 операции 1 11
6. 7. Понятие итератора (продолжение) Задачи класса-итератора 1. Доступ к private – protected областям контейнера 2. Начальная инициализация 3. Отслеживание просмотренных элементов 4. Сигнализация об окончании просмотра 12
6. 8. Реализация итератора class C { private: T *el; . . . friend class CIt; . . . }; class CIt { private: C *strt; T* cur; public: CIt(C &ob): strt(&ob), cur(ob. el){ } T* operator()(); . . . }; 13
6. 9. Использование итератора. . . C el; T *p; CIt next(el); . . . while(p = next()). . . (*p). . . 14
6. 10. Версия итератора-2 Предполагает использование итератора как обычного указателя: Итератор p; for (p = начало; p != конец; ++p) … (*p) … начало . . . конец 15
6. 10. Версия итератора-2 (продолжение) Аналогия: int a[N]; int *p; for (p = a; p != a + N; ++p) … (*p) … 16
6. 11. Реализация итератора-2 class С { private: T *el; . . . friend class CIt; . . . 17
6. 11. Реализация итератора-2 (продолжение) public: . . . typedef CIt Iterator; Iterator begin(); Iterator end(); . . . }; // C: : Iterator CIt 18
6. 11. Реализация итератора-2 (продолжение) CIt C: : begin() { return CIt (*this); } CIt C: : end() { return. . . ; } 19
6. 11. Реализация итератора-2 (продолжение) class СIt { private: C *strt; T* cur; public: CIt(C &ob): strt(&ob), cur(ob. el){ } СIt(): strt(NULL), cur(NULL) { } 20
6. 11. Реализация итератора-2 (продолжение) const T& operator *() const; CIt& operator ++( ); CIt operator ++(int); int operator !=(const CIt &) const; int operator ==(const CIt &) const; }; 21
6. 11. Реализация итератора-2 (продолжение) const T& CIt: : operator *() const {. . . return *cur ; }. . . 22
6. 12. Использование итератора-2. . . C a; . . . C: : Iterator it; for(it = a. begin(); it != a. end(); ++it) cout << (*it) << endl; . . . 23