Статичното свойство на обект означава това. Статични членове и статичен модификатор

Урок 25. Статични функции и членове от данни

Досега всеки създаден от вас обект имаше свой собствен набор от елементи от данни. В зависимост от целта на вашето приложение може да има ситуации, при които обекти от един и същи клас трябва да споделят един или повече елементи от данни. Да предположим например, че пишете програма за заплати, която проследява работните часове за 1000 служители. За да определи данъчната ставка, програмата трябва да знае условията, в които работи всеки служител. Нека използваме класова променлива за това състояние_на_работа.Въпреки това, ако всички служители работят при еднакви условия, вашата програма може да споделя този елемент от данни между всички обекти от тип служител.Така вашата програма намалява количеството необходима памет, като изхвърля 999 копия на една и съща информация. За да споделите елемент от клас, трябва да декларирате този елемент като статичен (статичен).Този урок обхваща стъпките, които трябва да следвате, за да споделите елемент от клас между множество обекти. До края на този урок ще сте усвоили следните основни концепции:

    C++ ви позволява да имате обекти от същия тип, които споделят един или повече членове на клас.

    Ако вашата програма присвои стойност на споделен елемент, тогава всички обекти от този клас веднага имат достъп до тази нова стойност.

    За да създадете споделен член с данни на клас, трябва да предхождате името на члена на класа ключова дума статичен.

    След като програмата е декларирала елемент от класа като статичентой трябва да декларира глобална променлива (извън дефиницията на класа), която съответства на този споделен член на класа.

    Вашите програми могат да използват ключовата дума статиченза да направи метод на клас извикваем, докато програмата може все още да не е декларирала никакви обекти от този клас.

СПОДЕЛЯНЕ НА ЕЛЕМЕНТ ДАННИ

Обикновено, когато създавате обекти от определен клас, всеки обект получава свой собствен набор от членове с данни. Възможно е обаче да има ситуации, при които обекти от един и същи клас трябва да споделят един или повече елементи от данни (статичен напрелементи от данни). В такива случаи декларирайте елементите от данни като обща тиняИ частен,и след това предшествайте типа с ключовата дума статиченкакто по-долу:

частен: статичен int споделена_стойност;

След като декларирате класа, трябва да декларирате елемента като глобална променлива извън класа, както е показано по-долу:

int class_name::shared_value;

Следната програма SHARE_IT.CPP дефинира класа поредица от книги,елемент за споделяне брой_страници,което е еднакво за всички обекти (книги) от класа (серията). Ако програма промени стойността на този елемент, промяната веднага се отразява във всички обекти на класа:

#включи

#включи

класна книга_серия

( public: book_series(char *, char *, float); void show_book(void); void set_pages(int) ; private: static int page_count; char title; char author[64]; float price; );

int book_series::page__count;

void book_series::set_pages(int pages)

( page_count = страници; )

book_series::book_series(char *заглавие, char *автор, плаваща цена)

( strcpy(book_series::title, title); strcpy(book_series::author, автор); book_series::price = цена; )

void book_series:: show_book (void)

( cout<< "Заголовок: " << title << endl; cout << "Автор: " << author << endl; cout << "Цена: " << price << endl; cout << "Страницы: " << page_count << endl; }

( book_series programming("Да се ​​научим да програмираме на C++", "Jamsa", 22.95); book_series word("Да се ​​научим да работим с Word за Windows", "Wyatt", 19.95); word.set_pages(256); programming.show_book ( ); word.show_book() ;<< endl << "Изменение page_count " << endl; programming.set_pages(512); programming.show_book(); word.show_book(); }

Както можете да видите, класът декларира брой_страницикак статично вътр.Веднага след дефиницията на класа програмата декларира елемент брой_страницикато глобална променлива. Когато една програма промени елемент брой_страници,промяната веднага се отразява във всички обекти на класа книга_поредица.

Споделяне на членове на класа

В зависимост от вашата програма може да има ситуации, в които трябва да споделите определени данни в множество екземпляри на обект. За да направите това, декларирайте елемента като статичен. След това декларирайте този елемент извън класа като глобална променлива. Всички промени, които вашата програма прави в този елемент, ще бъдат незабавно отразени в обектите от този клас.

Използване на елементи с атрибутипубличен статичен if обекти не съществуват

Както току-що научихте, когато декларирате елемент от клас като статичентози елемент се споделя от всички обекти от даден клас. Възможно е обаче да има ситуации, при които програмата все още не е създала обекта, но трябва да използва елемента. За да използвате елемент, вашата програма трябва да го декларира като публиченИ статичен.Например следната програма USE_MBR.CPP използва елемента брой_странициот класа поредица от книги,дори ако обекти от този клас не съществуват:

#включи

#включи

класна книга_серия

( public: static int page_count; private: char title; char author; float price;);

int book_series::page_count;

void main(void) ( book_series::page_count = 256; cout<< "Текущее значение page_count равно " << book_series::page_count << endl; }

В този случай, тъй като класът дефинира елемент от класа брой_страницикак публиченпрограма може да има достъп до този елемент от класа, дори ако обектите на класа книга_поредицане съществуват.

ИЗПОЛЗВАНЕ НА СТАТИЧНИ ЕЛЕМЕНТНИ ФУНКЦИИ

Предишната програма илюстрира използването статиченелементи от данни. По подобен начин C++ ви позволява да дефинирате статиченелемент функции (методи). Ако създавате статиченметод, вашата програма може да извика такъв метод, дори ако обектите не са създадени. Например, ако даден клас съдържа метод, който може да се използва за данни извън класа, можете да създадете този метод статичен.По-долу е класът менюкойто използва последователността esc на драйвера ANSI, за да изчисти екрана на дисплея. Ако имате инсталиран драйвер ANSI.SYS на вашата система, можете да използвате метода чист_екранза почистване на екрана. Тъй като този метод е деклариран като статичен,програмата може да го използва дори ако обектите са от тип менюне съществуват. Следната програма CLR_SCR.CPP използва метода чист_екранЗа да изчистите екрана на дисплея:

#включи

( public: static void clear_screen(void); // Тук трябва да има други методи private: int number_of_menu_options; );

void меню :: clear_screen (void)

( cout<< "\033" << "}

Зареждане...
Топ