КНИГА C
В C++ функционалните компоненти могат да се използват с модификатора static и const. Обикновен функционален компонент, наречен
обект. функция ( a , b );
има явен списък с параметри a и b и неявен списък с параметри, състоящ се от компонентите на данните на обектната променлива. Неявните параметри могат да се разглеждат като списък от параметри, достъпни чрез този указател. Компонент на статична функция не може да има достъп до нито един от компонентите, използвайки този указател. Константен функционален компонент не може да променя неявни параметри.
# включва " iostream . h "
двойно zp; // работна заплата за изработка на 1 бр
двойно nl 1, nl 2; // два данъка върху заплатите
двойно sr; // брой суровини за продукт
статичен двоен cs; // цена на суровините за 1 продукт
cls()<> // конструктор по подразбиране
статичен void vvod_cn(double);
двойно seb() const;
двойно cls::cs; // изрична дефиниция на статичен член във файлов контекст
cin>> nl1 >> nl2 >> zp;
двоен cls :: seb() const
> // неявен параметър ( kl zp nl 1 nl 2 sr )
c 1.inpt(100); // инициализация на първия обект
c 2. inpt (200); // инициализация на втория обект
Ключовата дума static не трябва да се включва в декларацията на обект на статичен компонент на клас. Например ключовата дума static липсва в описанието на функцията vvod_cn. В противен случай може да има конфликт между статичните компоненти на класа и външните статични функции и променливи.
Следващият пример демонстрира как да получите достъп до статичните данни на клас от различни функции.
intcls::k=0; // изрична дефиниция на статичен член във файлов контекст
void cls :: f 1() // достъпът е възможен от функция на клас
void cls :: f 2() // отстатични функции на класа са възможни
void f 3() // от външна функция е възможно
< cout cls :: k endl ;>// достъп само до публични статични данни
cout cls :: k endl ; // само публични статични данни могат да бъдат достъпни
Резултатът от програмата:
Функциите на класа, декларирани със спецификатора const, могат да бъдат извикани на обект със спецификатора const, но функциите без спецификатора const не могат.
c 1.inpt(100); // невалидно повикване
c 2.inpt(100); // правилно извикване на функция
c 1. seb(); // правилно извикване на функция
За функции със спецификатор const този указател има следния тип:
const име на клас * const това;
Следователно не е възможно да промените стойността на обектен компонент чрез този указател, без изрично да го напишете. Нека да разгледаме това като използваме функцията seb като пример.
двоен cls :: seb() const
< (( cls *) това )->zp --; // възможна модификация на неявния параметър
// zp чрез изрично записване на този указател
Основни свойства и правила за използване на статични и константни функции:
- статичните функционални компоненти нямат този указател, така че нестатичните компоненти на класа могат да бъдат достъпни само чрез . или ->;
- не могат да се декларират две еднакви функции с еднакви имена и типове аргументи, като едната е статична, а другата не;
- статичните функционални компоненти не могат да бъдат виртуални.