Скачать презентацию 6 Контейнерные классы 6 1 Отношения между Скачать презентацию 6 Контейнерные классы 6 1 Отношения между

6.Контейнерные классы.pptx

  • Количество слайдов: 23

6. Контейнерные классы 6. Контейнерные классы

6. 1. Отношения между классами Отношение части Класс1 ЕСТЬ ЧАСТЬ Класса 2 Отношение разновидности 6. 1. Отношения между классами Отношение части Класс1 ЕСТЬ ЧАСТЬ Класса 2 Отношение разновидности Класс1 ЕСТЬ НЕКОТОРЫЙ Класс2 Лепесток ЕСТЬ ЧАСТЬ цветка Роза ЕСТЬ НЕКОТОРЫЙ цветок 2

6. 2. Контейнерный класс Определяет агрегатный тип, состоящий из экземпляров других типов Класс2 целое 6. 2. Контейнерный класс Определяет агрегатный тип, состоящий из экземпляров других типов Класс2 целое ЕСТЬ ЧАСТЬ n Класс1 часть Точка ЕСТЬ ЧАСТЬ окружности 3

6. 2. Контейнерный класс (продолжение) Примеры: Окружность Прямоугольник ЕСТЬ ЧАСТЬ 1 Точка 2 Точка 6. 2. Контейнерный класс (продолжение) Примеры: Окружность Прямоугольник ЕСТЬ ЧАСТЬ 1 Точка 2 Точка 4

6. 3. Диаграмма классов Класс2 атрибуты2 имя: Класс1[1. . n] операции 2 n Класс1 6. 3. Диаграмма классов Класс2 атрибуты2 имя: Класс1[1. . n] операции 2 n Класс1 атрибуты1 операции 1 5

6. 3. Диаграмма классов (продолжение) Точка ЕСТЬ ЧАСТЬ окружности Circle -center: Point -rad: double 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. 4. Класс Point 7

6. 5. Класс Circle 8 6. 5. Класс Circle 8

6. 6. Тестирование классов Point p 1, p 2(1); Circle c 1(1), c 2(p 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. Понятие итератора Итераторы – методы, предоставляющие последовательный доступ к каждому элементу в 6. 7. Понятие итератора Итераторы – методы, предоставляющие последовательный доступ к каждому элементу в состоянии экземпляра контейнерного класса Прикладная программа . . . Экземпляр контейнерного класса 10

6. 7. Понятие итератора (продолжение) Класс2 1 атрибуты2 имя: Класс1[1. . n] Класс-итератор * 6. 7. Понятие итератора (продолжение) Класс2 1 атрибуты2 имя: Класс1[1. . n] Класс-итератор * операции 2 n Класс1 атрибуты1 операции 1 11

6. 7. Понятие итератора (продолжение) Задачи класса-итератора 1. Доступ к private – protected областям 6. 7. Понятие итератора (продолжение) Задачи класса-итератора 1. Доступ к private – protected областям контейнера 2. Начальная инициализация 3. Отслеживание просмотренных элементов 4. Сигнализация об окончании просмотра 12

6. 8. Реализация итератора class C { private: T *el; . . . friend 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); . . 6. 9. Использование итератора. . . C el; T *p; CIt next(el); . . . while(p = next()). . . (*p). . . 14

6. 10. Версия итератора-2 Предполагает использование итератора как обычного указателя: Итератор p; for (p 6. 10. Версия итератора-2 Предполагает использование итератора как обычного указателя: Итератор p; for (p = начало; p != конец; ++p) … (*p) … начало . . . конец 15

6. 10. Версия итератора-2 (продолжение) Аналогия: int a[N]; int *p; for (p = a; 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 6. 11. Реализация итератора-2 class С { private: T *el; . . . friend class CIt; . . . 17

6. 11. Реализация итератора-2 (продолжение) public: . . . typedef CIt Iterator; Iterator begin(); 6. 11. Реализация итератора-2 (продолжение) public: . . . typedef CIt Iterator; Iterator begin(); Iterator end(); . . . }; // C: : Iterator CIt 18

6. 11. Реализация итератора-2 (продолжение) CIt C: : begin() { return CIt (*this); } 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: 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 ++( ); 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 {. . 6. 11. Реализация итератора-2 (продолжение) const T& CIt: : operator *() const {. . . return *cur ; }. . . 22

6. 12. Использование итератора-2. . . C a; . . . C: : Iterator 6. 12. Использование итератора-2. . . C a; . . . C: : Iterator it; for(it = a. begin(); it != a. end(); ++it) cout << (*it) << endl; . . . 23