м. Явно описати чи визначити вказівник this можна і не треба. Відповідно до неявним визначенням this є константним вказівником, тобто змінити його не можна, проте в кожній належить класу функції він вказує саме на той об'єкт, для якого функція викликається. Кажуть, що покажчик this є додатковим (прихованим) параметром кожної нестатичних компонентної функції. Іншими словами, при вході в тіло належить класу функції вказівник this ініціалізується значенням адреси того об'єкта, для якого викликана функція. Об'єкт, який адресується покажчиком this, стає доступним усередині що належить класу функції саме за допомогою вказівника this. При роботі з компонентами класу всередині належить класу функції можна було б скрізь використовувати цей покажчик.
Таким чином, кожна нестатичних функція - елемент класу має доступ до об'єкта, для якого вона викликана через вказівник this.
Розглянемо приклад:
comp & Operator + (comp)
{real = real + x.real;
im = im + x.im;
return * this;}
У прикладі реалізована для класу comp перевантаження операції додавання. Тут послідовно складаються дійсні та уявні частини. Повернення результату відбувається через вказівник this. Якщо потрібно повернути адреса об'єкту, то пишеться return this. p> 7. Друзі
Дружньою функцією класу називається функція, яка, не будучи його компонентом, має доступ до його захищеним і власним компонентам.
Функція не може стати іншому класу "без його згоди". Для отримання прав одного функція повинна бути описана в тілі класу зі специфікатором friend. Саме за наявності такого опису клас надає функції права доступу до захищених і власним компонентам.
class C
{...
friend class A;}
Всі функції класу A мають доступ до закритих полів класу C.
Дружба не носить "Наскрізного" характеру (не має властивість транзитивності): якщо клас A друг класу B, а клас B один класу C, то це не означає, що A друг C.
Відзначимо особливості дружніх функцій. Дружня функція при виклику не отримує покажчика this. Об'єкти класів повинні передаватися дружньої функції тільки явно через апарат параметрів. При виклику дружньої функції не можна використовувати операції вибору:
імя_об'екта.імя_функціі і указатель_на_об'ект-> імя_функциі
8. Перевантаження операцій
На всі операції мови C + +, крім операцій оголошення, new, delete, та інших операцій, пов'язаних з визначенням похідних типів даних, поширюється властивість поліморфізму, тобто можливості використання в різних випадках для однієї і тієї ж операції операндів різних типів. Так, наприклад, операція складання дозволяє "змішувати" типи int, double, float і інші в одному вираженні. Такий поліморфізм забезпечений внутрішніми механізмами мови C + +.
Таким чином, не можна перевантажувати такі операції: . :: * ?:
Щоб з'явилася можливість використовувати стандартну для мови C + + операцію з незвичайними для неї даними, необхідно спеціальним чином визначити її нову поведінку. Це можливо, якщо хоча б один з операндів є об'єктом деякого класу, тобто введеного користувачем типу. У цьому випадку застосовується механізм, в чому схожий з механізмом визначення функцій. Для поширення дії операції на нові користувача типи даних програміст визначає спеціальну функцію, звану "операція-функція" (operator function). Формат визначення операції-функції:
тіп_возвращаемого_значенія operator знак_операціі (специфікація параметрів операції-функції) {оператори тіла операції-функції}
При необхідності може додаватися і прототип операції-функції з таким форматом:
тіп_возвращаемого_значенія operator знак_операціі (специфікація параметрів операції-функції);
І в прототипі, і в заголовку визначення операції-функції використовується ключове слово operator, слідом за яким розміщений знак операції. Якщо прийняти, що
конструкція operator знак_операціі є ім'я деякої функції, то визначення і прототип операції-функції подібні до визначення і прототипу звичайної функції мови C + +. Наприклад, для поширення дії бінарної операції * на об'єкти класу T може бути введена функція із заголовком T operator * (T x, T y).
Визначена таким чином операція (у нашому прикладі операція "зірочка") називається перевантаженої (по-англійськи - overload), а сам механізм - перевантаженням або розширенням дії стандартних операцій мови C + +.
Кількість параметрів у операції-функції залежить від арності операції і від способу визначення функції. Операція-функція визначає алгоритм виконання перевантаженої операції, коли ця операція застосовується до об'єктів класу, для якого операція-функція введена. Щоб явна зв'язок з класом була забезпечена, операція-функція повинна бути або компонентом класу, або вона повинна бути ви...