Визначення компонентних функцій 1

Компонентна функція повинна бути обов'язково описана в тел ?? е класу. На відміну від звичайних (глобальних) функцій компонентна функція має доступ до вс ?? їм компонентів класу (з будь-яким статусом доступу). Функція-компонент класу має ту ж область видимості, що і клас, до якого вона належить. Програміст може впливати на компілятор, пропонуючи йому оформити ту чи іншу функцію як подану (вбудовується). Для цих цілий ?? їй в определ ?? еніі функції вказується службове слово (специфікатор) inline. При определ ?? еніі класів їх компонентні функції також бувають специфіковані як підставляються. Крім явного використання службового слова inline для цього використовується наступна угода. У разі якщо определ ?? ення (не тільки прототип) належить класу функції повністю розміщено в класі (в тел ?? е класу), то ця функція за замовчуванням вважається підставляється. Саме таким чином определ ?? єни компонентні функції класів complex1, complex, stroka, використаних раніше як приклади. Всі функції перерахованих класів сприймаються комп'ютером як підставляються, тобто при кожному виклику цих функцій їх код''встраівается'' безпосередньо в точку виклику.

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

При зовнішньому определ ?? еніі компонентної функції програміст''должен сообщіть'' компілятору, до якого саме класу вона належить. Для цього використовується бінарна форма операції '::' (вказівки області видимості).

Формат її використання в даному випадку такий:

<имя класса>. <имя компонентной функции>

Наведена конструкція, звана кваліфікованим ім'ям компонентної функції, означає, що функція є компонент класу і лежить в області його дії. Саме таке определ ?? ення прив'язує функцію до класу і дозволяє в її тел ?? е безпосередньо використовувати будь-які дані класу (його об'єктів) і будь-які належать класу функції (це відноситься і до власних private - і до захищених protected - компонентів).

При зовнішньому определ ?? еніі компонентної функції в тел ?? е класу поміщається її прототип:

<тип> <имя функции> (<спецификация и инициализация параметров>);

Поза тілом класу компонентна функція визначається таким чином:

<тип> <имя функции> (<спецификация формальных параметров>)

<тело, принадлежащее классу функции>

Як приклад програму з використанням класу''вектор в двовимірному пространстве''.

Компонентні дані (властивості) класу: координати вектора.

Компонентні функції (методи) класу:

1) введення координат;

2) висновок координат;

3) определ ?? ення довжини вектора.

Схожі статті