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-функцій:
- статичні компоненти-функції не мають цього покажчика, тому звертатися до нестатичних компонентів класу можна тільки з використанням . або ->;
- не можуть бути оголошені дві однакові функції з однаковими іменами та типами аргументів, причому одна статична, а інша ні;
- Статичні компоненти-функції не можуть бути віртуальними.