BOOK C

У С++ компоненти функції можуть використовуватися з модифікатором static і const. Звичайна компонента-функція, що викликається

object. function (a, b);

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

# include " iostream . h "

double zp; // зарплата виробництво 1 вироби

double nl 1, nl 2; // два податку на з/пл

double sr; // Кількість сировини на виріб

static double cs; // ціна сировини на 1 виріб

cls ()<> // конструктор за замовчуванням

static void vvod_cn(double);

double seb() const;

double cls::cs; // явне визначення static-члена у тих файла

cin >> nl1 >> nl2 >> zp;

double cls :: seb() const

> // неявний параметр (kl zp nl 1 nl 2 sr)

c 1. inpt (100); // ініціалізація першого об'єкта

c 2. inpt (200); // ініціалізація другого об'єкта

Ключове слово static не повинно бути включене в опис статичного об'єкта компоненти класу. Так, в описі функції vvod cn відсутня ключове слово static. В іншому випадку можлива суперечність між static-компонентами класу і зовнішніми static-функціями та змінними.

Наступний приклад демонструє доступ до static даних класу з різних функцій.

int cls :: k =0; // явне визначення static -члена у тих файла

void cls :: f 1() // із функції класу можливий доступ

void cls :: f 2() // ізstatic функції класу можливий

void f 3() // із зовнішньої функції можливий

< cout cls :: k endl ;>// доступ тільки до public static даних

cout cls :: k endl; // Можливий доступ лише до public static даних

Результат роботи програми:

Функції класу, оголошені зі специфікатором const, можуть бути викликані об'єкта зі специфікатором const, а функції без специфікатора const - не можуть.

c 1. inpt (100); // невірний виклик

c 2. inpt (100); // правильний виклик функції

c 1. seb(); // правильний виклик функції

Для функцій зі специфікатором const покажчик this має такий тип:

const имя_класа * const this;

Отже, не можна змінити значення компоненти об'єкта через вказівник цього без явного запису. Розглянемо це з прикладу функції seb.

double cls :: seb() const

< (( cls *) this )->zp --; // Можлива модифікація неявного параметра

// zp за допомогою явного запису цього покажчика

Основні властивості та правила використання static-і const-функцій:

- статичні компоненти-функції не мають цього покажчика, тому звертатися до нестатичних компонентів класу можна тільки з використанням . або ->;

- не можуть бути оголошені дві однакові функції з однаковими іменами та типами аргументів, причому одна статична, а інша ні;

- Статичні компоненти-функції не можуть бути віртуальними.