Содержание
- 2. Что такое операция? Каждая операция реализована как вызов функции, так что a = b+c эквивалентно operator
- 3. Пример перегрузки операций a если а принадлежит одному из целочисленных типов, то это – операция побитового
- 4. Ограничения на перегрузку операций обозначения собственных операций вводить нельзя; перегрузка операций для стандартных типов не допускается;
- 5. Реализация перегрузки операций при написании классов Функция-операция может быть определена как: метод класса дружественная функция класса
- 6. Операции над классом Point2D Сложение и вычитание точек (по правилам сложения и вычитания векторов); Унарный минус
- 7. Реализация унарных операций Если унарная операция определяется как метод класса, она описывается без параметров (параметром считается
- 8. Примеры реализации унарных операций для класса Point2D Унарный минус: class Point2D { … Point2D operator –
- 9. Примеры реализации унарных операций для класса Point2D Инкремент (префиксный) : Отметим, что операция префиксного инкремента возвращает
- 10. Примеры реализации унарных операций для класса Point2D Инкремент (постфиксный) : Отметим, что операция постфиксного инкремента возвращает
- 11. Реализация бинарных операций Если бинарная операция определяется как метод класса, она описывается с одним параметром, соответствующим
- 12. Примеры реализации бинарных операций для класса Point2D Сложение: class Point2D { … Point2D operator + (const
- 13. Примеры реализации бинарных операций для класса Point2D Скалярное произведение: class Point2D { … double operator *
- 14. Примеры реализации бинарных операций для класса Point2D С равнение : class Point2D { … bool operator
- 15. Примеры реализации бинарных операций для класса Point2D Умножение на число : class Point2D { … Point2D
- 16. Примеры реализации бинарных операций для класса Point2D Вывод в поток: class Point2D { … friend ostream&
- 17. Перегрузка операции присваивания Для вновь создаваемых классов создаётся перегруженная операция присваивания по умолчанию. Эта операция копирует
- 18. Схемы работы перегруженной операции присваивания a = b проверка на самоприсваивание; освобождение ресурсов, полученных объектом a;
- 19. Реализация операции присваивания для класса Person class Person { … Person& operator =(const Person&); … };
- 20. Методы Clone и Erase Для эффективной реализации работы с ресурсами можно написать два защищённых метода: метод,
- 21. Реализация и использование методов Clone и Erase void Person::Erase() { delete [] name; } void Person::Clone(const
- 22. Перегрузка операции приведения типа Запись: operator тип() Нет возвращаемого значения class Point2D { … operator double
- 23. Перегрузка операции приведения типа Point2D p(10,5); … cout // number overloads have similar conversions cout cout
- 24. Перегрузка оператора вызова функции Запись: тип_возврата operator() (формальные параметры); Класс, в котором определён хотя бы один
- 25. Пример работы с функциональным классом class IsBest { … bool operator () (int a, int b)
- 26. Что такое очередь? Очередью называется структура данных, содержащая последовательность однотипных элементов и позволяющая эффективно выполнять следующие
- 27. Что такое очередь? Над очередью иногда можно выполнить дополнительные операции: доступ к элементу очереди по его
- 28. Реализация очереди Существует несколько способов реализации очереди. Основные способы: на массивах (циклическая очередь); на линейных списках
- 29. Описание очереди (файл queue.h) Часть 1 (предварительные описания) #ifndef __LQueue_defined__ #define __LQueue_defined__ #include using namespace std;
- 30. Описание очереди (файл queue.h) Часть 2 (защищённые поля и методы) private: struct QItem { InfoType info;
- 31. Описание очереди (файл queue.h) Часть 3 (публичные методы) public: LQueue(): front(NULL), rear(NULL), size(0) {}; LQueue(const LQueue&);
- 32. Реализация очереди (файл queue.cpp) Часть 1 (защищённые методы) void LQueue::Erase() { while (Pop()); size = 0;
- 33. Реализация очереди (файл queue.cpp) Часть 2 (конструктор копирования, деструктор, оператор присваивания) LQueue::LQueue(const LQueue& Q) { size
- 34. Реализация очереди (файл queue.cpp) Часть 3 (метод Push) void LQueue::Push(InfoType Ainfo) { QItem* tmp = new
- 35. Реализация очереди (файл queue.cpp) Часть 4 (метод Pop) bool LQueue::Pop() { if (size==0) return false; QItem
- 36. Реализация очереди (файл queue.cpp) Часть 4 (методы GetFirst и IsEmpty) InfoType LQueue::GetFirst() const { if (size==0)
- 37. Реализация очереди (файл queue.cpp) Часть 4 (методы GetSize и operator []) unsigned LQueue::GetSize() const { return
- 38. Реализация очереди (файл queue.cpp) Часть 4 (другой вариант перегрузки []) const InfoType& LQueue::GetByIndex (unsigned k) const
- 40. Скачать презентацию