Ноу Інти, лекція, класи

14.6. Перевизначення операцій (резюме)

Створюючи новий тип даних. ми були змушені пояснити компілятору, як слід виконувати звичайні операції (додавання, віднімання, порівняння, введення / висновок і т.п.) з об'єктами нового типу. По суті справи, операції - це найпростіші функції, на вхід яких надходить один або два операнда, над ними виконується обумовлене дію і формується повертається значення. У цьому сенсі перевизначення операцій, практично, нічим не відрізняється від перевизначення функцій. У найзагальнішому вигляді операція переопределяется наступним чином:







Тут - позначення знака операції.

Єдина відмінність від перевизначення функції полягає в специфічному імені, що його замінює ім'я функції.

У зв'язку з тим, що повинна бути збережена логіка обробки компілятором арифметичних і логічних формул, процедур введення / виведення, операторів присвоювання, инкрементирования і декрементірованія, на перевизначення операцій накладаються три важливих обмеження:







  • пріоритет операцій. описаний в стандарті мови C ++, міняти не можна;
  • кількість операндів, яке спочатку було оголошено в мові, для кожної операції має бути збережено;
  • не можна перевизначати операції '.' (Роздільник в складових іменах), '. *' (Звернення до полю об'єкта через покажчик), '::' (специфікатор приналежності), '?:' (Умовний вираз), '#' (директива препроцесора), '##' (операція конкатенації в препроцесорів).

При написанні процедури перевизначення двомісній операції треба пам'ятати, що аргумент a1. розташований лівіше знака операції. передається в функцію-член класу двома способами. По-перше, як поля об'єкта, оголошені в якості членів-даних класу. По-друге, як прихований покажчик this. Тому перший операнд операції як аргумент в функції перевизначення не вказується.

Ще одне обмеження на функцію перевизначення операції полягає в тому, що серед її параметрів не можна користуватися значеннями за замовчуванням.

Розглянемо варіанти перевизначення двомісних операцій на прикладі класу Tpoint. представляє точку з парою цілочисельних координат:

Операція складання, оголошена в наведеному вище прикладі, приймає другий доданок як значення. Тому опис нової процедури може виглядати наступним чином:







Схожі статті