Proprietatea statică a unui obiect înseamnă că. Membri statici și modificatorul static

Lecția 25. Funcții statice și membri de date

Până acum, fiecare obiect pe care l-ați creat avea propriul set de elemente de date. În funcție de scopul aplicației dvs., pot exista situații în care obiectele din aceeași clasă trebuie să partajeze unul sau mai multe elemente de date. De exemplu, să presupunem că scrieți un program de salarizare care urmărește orele de lucru pentru 1.000 de angajați. Pentru a determina cota de impozitare, programul trebuie să cunoască condițiile în care lucrează fiecare angajat. Să folosim o variabilă de clasă pentru aceasta starea_de_muncă. Cu toate acestea, dacă toți angajații lucrează în aceleași condiții, programul dvs. ar putea partaja acest element de date între toate obiectele de tip angajat. Deci, programul dumneavoastră reduce cantitatea de memorie necesară aruncând 999 de copii ale aceleiași informații. Pentru a partaja un element de clasă, trebuie să declarați acel element ca static (static). Acest tutorial acoperă pașii pe care trebuie să îi urmați pentru a partaja un element de clasă între mai multe obiecte. Până la sfârșitul acestei lecții, vei fi stăpânit următoarele concepte de bază:

    C++ vă permite să aveți obiecte de același tip care împărtășesc unul sau mai mulți membri ai unei clase.

    Dacă programul dvs. atribuie o valoare unui element partajat, atunci toate obiectele acelei clase au imediat acces la acea nouă valoare.

    Pentru a crea un membru de date de clasă partajat, trebuie să precedați numele membrului clasei cuvânt cheie static.

    După ce programul a declarat un element de clasă ca static trebuie să declare o variabilă globală (în afara definiției clasei) care corespunde acelui membru de clasă partajat.

    Programele dvs. pot folosi cuvântul cheie static pentru a face apelabilă o metodă de clasă în timp ce programul poate să nu fi declarat încă niciun obiect din acea clasă.

DISTRIBUIREA UNUI ELEMENT DE DATE

De obicei, atunci când creați obiecte dintr-o anumită clasă, fiecare obiect primește propriul set de membri de date. Cu toate acestea, pot exista situații în care obiectele din aceeași clasă trebuie să partajeze unul sau mai multe elemente de date (static e elemente de date). În astfel de cazuri, declarați elementele de date ca nămol generalȘi privat,și apoi prefață tipul cu cuvântul cheie static ca mai jos:

private: static int shared_value;

După declararea clasei, trebuie să declarați elementul ca variabilă globală în afara clasei, după cum se arată mai jos:

int class_name::shared_value;

Următorul program SHARE_IT.CPP definește clasa serie de carti, element de partajare numărul de pagini, care este același pentru toate obiectele (cărțile) clasei (serie). Dacă un program modifică valoarea acestui element, modificarea se reflectă imediat în toate obiectele clasei:

#include

#include

clasa book_series

( public: book_series(char *, char *, float); void show_book(void); void set_pages(int) ; privat: 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 = pagini; )

book_series::book_series(char *titlu, caracter *autor, preț flotant)

( strcpy(carti_serie::titlu, titlu); strcpy(carti_serie::autor, autor); book_series::pret = pret; )

void book_series:: show_book (void)

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

( book_series programare(„Învățați să programați în C++”, „Jamsa”, 22.95); book_series word(„Învățați să lucrați cu Word pentru Windows”, „Wyatt”, 19.95); word.set_pages(256); programing.show_book ( ); word.show_book() ;<< endl << "Изменение page_count " << endl; programming.set_pages(512); programming.show_book(); word.show_book(); }

După cum puteți vedea, clasa declară numărul de pagini Cum static int. Imediat după definirea clasei, programul declară un element numărul de pagini ca variabilă globală. Când un program modifică un element numărul de pagini, schimbarea se reflectă imediat în toate obiectele clasei serie de carti.

Partajarea membrilor clasei

În funcție de programul dvs., pot exista situații în care trebuie să partajați anumite date în mai multe instanțe ale unui obiect. Pentru a face acest lucru, declarați elementul ca static. Apoi, declarați acest element în afara clasei ca variabilă globală. Orice modificare pe care programul dumneavoastră le face acestui element se va reflecta imediat în obiectele acestei clase.

Utilizarea elementelor cu atributepublic static dacă obiectele nu există

După cum tocmai ați învățat, atunci când declarați un element de clasă ca static acest element este împărtășit de toate obiectele unei clase date. Cu toate acestea, pot exista situații în care programul nu a creat încă obiectul, dar trebuie să folosească elementul. Pentru a utiliza un element, programul dumneavoastră trebuie să îl declare ca publicȘi static. De exemplu, următorul program USE_MBR.CPP utilizează elementul numărul de pagini din clasa serie de carti, chiar dacă obiectele acestei clase nu există:

#include

#include

clasa book_series

( public: static int număr_pagini; privat: titlu caracter; autor caracter; preț flotant; );

int book_series::page_count;

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

În acest caz, deoarece clasa definește un element al clasei numărul de pagini Cum public un program poate accesa acest element de clasă chiar dacă obiectele clasei serie de carti nu exista.

UTILIZAREA FUNCȚIILOR DE ELEMENT STATIC

Programul anterior a ilustrat utilizarea static elemente de date. În mod similar, C++ vă permite să definiți static funcții ale elementelor (metode). Dacă creezi static metoda, programul dumneavoastră poate apela o astfel de metodă chiar dacă obiectele nu au fost create. De exemplu, dacă o clasă conține o metodă care poate fi utilizată pentru date din afara clasei, puteți crea acea metodă static. Mai jos este clasa meniul care utilizează secvența esc de driver ANSI pentru a șterge ecranul de afișare. Dacă aveți driverul ANSI.SYS instalat pe sistemul dvs., puteți utiliza metoda ecran_clear pentru a curăța ecranul. Deoarece această metodă este declarată ca static, un program îl poate folosi chiar dacă obiectele sunt de tip meniul nu exista. Următorul program CLR_SCR.CPP utilizează metoda ecran_clear Pentru a șterge ecranul de afișare:

#include

( public: static void clear_screen(void); // Ar trebui să existe alte metode aici private: int number_of_menu_options; );

void menu::clear_screen(void)

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

Se încarcă...
Top