3.Простые классы.pptx
- Количество слайдов: 41
3. Разработка простых классов
3. 1. Этапы разработки класса • Определение класса – имя класса – состояние класса – данные-члены класса – методы класса – прототипы функций (сигнатура) • Реализация класса – как мы добьемся требуемого поведения • Использование класса 2
3. 2. Определение класса class имя_класса { уровень_видимости: описания данныхчленов класса прототипы функций – методов класса уровень_видимости: . . . }; struct имя_класса { уровень_видимости: описания данныхчленов класса прототипы функций – методов класса уровень_видимости: . . . }; 3
3. 3. Уровень видимости • private • protected • public private и protected Доступ к private и protected областям – через public интерфейс класса 4
3. 4. Диаграмма класса UML – Unified Modeling Language Имя класса +|-|#атрибут: тип данных кратность. . . +|-|#сигнатура операции. . . 5
3. 4. Диаграмма класса (продолжение) Кратность: [n] – точно n значений [m. . n] – от m до n значений [*] – произвольное количество значений Если кратность не указана, предполагается, что задано [1]. Сигнатура операции: имя_операци(параметр : тип_данных = значение_по_умолчанию) : тип_результата 6
3. 5. Диаграмма класса: пример X -a 1: int #a 2: char[1. . 7] +a 3: double -f 1(): void +f 2(p: int): int 7
3. 6. Члены класса class X{ private: int a 1; void f 1(); protected: char a 2[8]; public: double a 3; int f 3(int p); }; struct X{ private: int a 1; void f 1(); protected: char a 2[8]; public: double a 3; int f 3(int p); }; 8
3. 7. Доступ к членам класса X obj; – экземпляр класса obj. a 1, obj. a 2, obj. f 1() – ошибка: члены класса a 1, a 2 и f 1() не доступны извне класса obj. a 3, obj. f 3() – корректны Из функций-членов класса f 1() и f 3() доступны все имена: a 1, a 2, a 3, f 1() и f 3() 9
3. 8. Сравнение class и struct class X{ int a 1; void f 1(); . . . }; эквивалентно class X{ private: int a 1; void f 1(); . . . }; struct X{ int a 1; void f 1(); . . . }; эквивалентно struct X{ public: int a 1; void f 1(); . . . }; 10
3. 9. Методы класса • • • Конструкторы Деструктор Селекторы Модификаторы Итераторы 11
3. 10. Селекторы и модификаторы class X { private: int a; public: int get() const ; // функция-селектор void set(int); // функция-модификатор }; 12
3. 11. Конструкторы • Инициализирующие – пустой (без аргументов) • определенный по умолчанию • определенный явно – с аргументами • определенный явно • Копирующий • определенный по умолчанию • определенный явно 13
3. 12. Прототипы конструкторов class имя_класса { public: имя_класса (); имя_класса (тип параметр, …); имя_класса (const имя_класса &); … }; 14
3. 13. Деструктор • Определенный по умолчанию • Определенный явно Прототип деструктора: class имя_класса { public: ~имя_класса (); … }; 15
3. 14. Пример 16
3. 15. Создание экземпляров класса имя_объекта; имя_класса имя_объекта (значение 1, …); имя_класса имя_объекта (); !!! имя_класса имя_объекта (объект_класса); Примеры: Rational a; Rational b(5), c(3, 4); Rational d(b); Rational f(); 17
3. 15. Создание экземпляров класса (продолжение) имя_класса имя_объекта [количество] = {значение 1, значение 2, . . . }; Примеры: эквивалентно 4 Rational m 1[4]; Rational m 2[ ] = { Rational(), Rational(4), Rational(5, 3), m 1[3] }; 18
3. 15. Создание экземпляров класса (продолжение) имя_класса * переменная; переменная = new имя_класса (); переменная = new имя_класса (значение, …); переменная = new имя_класса [количество]; 19
3. 15. Создание экземпляров класса (продолжение) Примеры: Rational *p 1, *p 2, *p 3; p 1 = new Rational; p 2 = new Rational(2, 3); p 3 = new Rational[5]; 20
3. 16. Пример 21
3. 17. Результаты тестирования 22
3. 17. Результаты тестирования (продолжение) 23
3. 18. Интерфейс класса Экземпляры класса Методы класса Состояние класса num den add() print() reduce() correct() gcd() 24
3. 18. Интерфейс класса Экземпляры класса (продолжение) Каждый экземпляр класса имеет свое собственное состояние и разделяет общее для класса поведение add() x num den print() reduce() correct() y num den z num gcd() den 25
3. 19. Использование методов класса адресат. имя_сообщения (аргументы) Примеры: Rational a, b(2, 5), c(2); a. assign(3, 4); a. print(); a. add(b). add(с). print(); 26
3. 20. Неявный параметр this адресат. имя_сообщения (аргументы) адресат num den функция-член класса this. . . den. . . – эквивалентно this->den 27
3. 21. Реализация методов класса В определении класса: class Rational { private: int num, den; . . . public: void assign(int x, int y = 1) { num = x; den = y; correct(); }. . . 28
3. 21. Реализация методов класса (продолжение) тип имя_класса : : имя_функции(параметры) { тело функции } Пример: void Rational : : assign(int x, int y) { num = x; den = y; correct(); } 29
3. 22. Конфликты имен void Rational : : assign(int num, int den) { Rational: : num = num; // или this->num Rational: : den = den; // или this->den correct(); // или this->correct() } 30
3. 23. Реализация конструкторов Rational: : Rational(): num(0), den(1){ } Rational: : Rational(int num, int den): num(num), den(den) { correct(); } 31
3. 23. Реализация конструкторов (продолжение) class Rational {. . . public: Rational(const Rational &r): num(r. num), den(r. den) { }. . . }; 32
3. 24. Определение класса Rational 33
3. 25. Реализация класса Rational 34
3. 26. Схема выполнения вызова c = a. add(b) a num den 2 3 b num den 1 6 c num den 5 6 this копируется num den 1 6 15 18 r область add(r) tmp вызывающая программа стек параметров 35
3. 26. Схема выполнения вызова c = a. add(b) (продолжение) a b c num den 2 3 num den 1 6 num den 5 6 this копируется num den 1 6 15 18 r область add(r) tmp this div область reduce() вызывающая программа стек параметров 36
3. 26. Схема выполнения вызова c = a. add(b) (продолжение) a b c num den 2 3 num den 1 6 num den 5 6 this копируется num 1 den 6 num 15 den 18 копируется вызывающая программа r область add(r) tmp this 3 div this 15 n 18 d 3 0 r область reduce() область gcd() стек параметров 37
3. 26. Схема выполнения вызова c = a. add(b) (продолжение) a b c num den 2 3 num den 1 6 num den 5 6 this копируется num 1 den 6 5 num 15 6 den 18 3 r область add(r) tmp this div область reduce() вызывающая программа стек параметров 38
3. 26. Схема выполнения вызова c = a. add(b) (продолжение) a b c num den 2 3 num den 1 6 num den 5 6 this копируется num den 1 6 5 6 r область add(r) tmp вызывающая программа стек параметров 39
3. 27. Тестирование класса Rational 40
3. 27. Тестирование класса Rational (продолжение) 41
3.Простые классы.pptx