Содержание
- 2. ЗМІСТ Механізми перевизначення операторів з використанням функцій-членів класу Механізми перевизначення операторів з використанням функцій- не членів
- 3. ЛІТЕРАТУРА: Horton Ivor, Van Weert Peter Beginning C++20: From Novice to Professional. – Apress, 2020. Chapter
- 4. Перевантаження операторів Оператори перевантажуються за допомогою функції operator. тип ім'я_класу::operator#(список_аргументів) { операція_над_класом } Оператор, що перевантажується,
- 5. Обмеження в переванта-женні операторів 1. Майже будь-який існуючий оператор в мові C++ можна перевантажити. Винятками є:
- 6. Обмеження в переванта-женні операторів 2. Можна перевантажити тільки існуючі оператори. Не можна створювати нові або перейменовувати
- 7. Обмеження в переванта-женні операторів 4. Початкову кількість операндів, підтримуваних оператором, змінити неможливо. Тобто з бінарним оператором
- 8. Механізми перевизначення операторів з використанням функцій-членів класу Оператори присвоювання (=), індексу ([]), виклику функції (()) вибору
- 9. /* Програма 1.Перевантаження операторів функціями-членами */ #include using namespace std; class three_d { int x, y,
- 10. void three_d::show() { // Відображення координат X, Y, Z. cout } three_d three_d::operator+(three_d op2) { //
- 11. three_d three_d::operator++() { // Перевантажений префіксний "++” х++; y++; z++; // інкремент координат х, у и
- 12. Перевантаження операторів з використанням функцій членів класу Обидві операторні функції мають тільки по одному параметру, незважаючи
- 13. Перевантаження операторів з використанням функцій членів класу У всіх випадках неявно передається об'єкт, що вказується ліворуч
- 14. Перевантаження операторів з використанням функцій членів класу На відміну від оператора "+", оператор присвоювання приводить до
- 15. Використання функцій-членів для перевантаження унарних операторів Операторна функція operator++() інкрементує кожну координату об'єкта й повертає модифікований
- 16. Обмеження на переванта-ження операторів: Основна ідея створення перевантаженого оператора - наділити його новими можливостями, які, проте,
- 17. Про значення порядку операндів У багатьох випадках порядок проходження операндів має значення. Наприклад, вираз А+B комутативний,
- 18. Перевантаження операторів з використанням функций-не членів класу Бінарні операторні функції, які не є членами класу, мають
- 19. Перевантаження операторів з використанням функцій-не членів класу //Реалізація функції-"друга” three_d operator+(three_d op1, three_d op2) { three_d
- 20. Перевантаження операторів з використанням функцій-не членів класу У багатьох випадках при перевантаженні операторів за допомогою функцій-"друзів"
- 21. Використання функцій-"друзів" дозволяє ставити значення вбудованого типу як праворуч, так і ліворуч від оператора. #include class
- 22. // Версія: об'єкт + int-значення. CL operator+(CL ob, int i) { CL temp; temp.count = ob.count
- 23. Використання функцій-"друзів" для перевантаження унарних операторів #include using namespace std; class three_d { int x, y,
- 24. Використання функцій-"друзів" для перевантаження унарних операторів Функції-не члени (у тому числі й "друзі" класу) не одержують
- 25. /* Програма 4. У цій програмі використовуються перевантажені операторні функції-"друзі" operator++() . */ #include using namespace
- 26. // Тепер це функція-"друг". three_d operator+(three_d op1, three_d op2) { three_d temp; temp.x = op1.x +
- 27. /* Перевантаження префіксної версії оператора "++" з використанням функції-"друга". Для цього необхідно використання посилального параметра. */
- 28. // Відображення координат X, Y, Z. void three_d:: show() { cout cout cout } int main(){
- 29. c++; // постфіксна версія інкремента c. show(); a = ++c; /* Об'єкт а одержує значення об'єкта
- 30. Перевантаження операторів відношення й логічних операторів Оператори відношення (наприклад, "==" або " // Перевантаження оператора "=="
- 31. Докладніше про оператор присвоювання:некоректна програма #include #include #include using namespace std; class sample { char *s;
- 32. void sample::set(char *str) { // Завантаження рядка. s = new char[strlen(str)+1]; strcpy(s, str); } sample sample::operator=(sample
- 33. Перевантаження оператора індексації масивів ([]) У C++ (з погляду механізму перевантаження) оператор "[]" уважається бінарним. Його
- 34. // Перевантаження оператора індексації масивів #include using namespace std; const int SIZE = 3; class atype
- 35. /* Повернення посилання з операторної функції operator()[]. */ #include using namespace std; const int SIZE =
- 36. Перевантаження оператора індексації масивів ([]) Одна з переваг перевантаження оператора "[]" полягає в тому, що з
- 37. // Контроль виходу за припустимий інтервал індексів класу atype #include #include #include using namespace std; const
- 38. Перевантаження оператора "()" При його перевантаженні створюється не новий спосіб виклику функцій, а операторна функція, якій
- 39. Перевантаження оператора "()" У загальному випадку при перевантаженні оператора "()" визначаються параметри, які необхідно передати функції
- 40. #include // Демонстрація перевантаження оператора "()". using namespace std; class three_d { int x, y, z;
- 41. Перевантаження інших операторів За винятком таких операторів, як new, delete, ->, ->* і "кома", інші С++-оператори
- 42. #include #include using namespace std; class str_type { // Створення "класового“ рядкового типу str_type. char string[80];
- 43. // Присвоювання одного рядка іншому str_type str_type::operator=(str_type str) { strcpy(string, str.string); return *this; } int main()
- 44. // Удосконалення рядкового класу. #include #include using namespace std; class str_type { char string[80]; public: str_type(char
- 46. Скачать презентацию