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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3) визначення довжини вектора.

Схожі статті