Componente și componente

Articole de clasă statică

După cum sa menționat deja, fiecare obiect nou creat al clasei are o copie proprie a datelor componente. Pentru a se asigura că aceste componente ale clasei sunt într-o singură instanță și nu sunt replicate la definirea fiecărui obiect de clasă nou, ele trebuie declarate statice în clasă:







static nume_tip static_component_name;

După cum puteți vedea, componenta de date statice face parte din clasă, dar nu face parte din obiectul acestei clase. Toate obiectele din clasa în care au fost declarate componentele de date statice, precum și obiectele din clasele sale derivate, pot acum partaja aceste componente comune pentru ele.

Componentele statice ale clasei date sunt stocate separat de componentele sale non-statice din memorie, iar memoria către componentele statice este alocată numai după ce acestea sunt determinate în afara definiției de clasă.

Pentru definiția externă a datelor componentelor statice, puteți utiliza următoarele construcții:

nume_clasă este numele_clasicii. imya_staticheskogo_komponenta_dannyh;

nume_clasă este numele_clasicii. static_database_name = inițializator;

nume_clasă este numele_clasicii. nume static_component (inițializator);

Aceste constructe trebuie să fie plasate în domeniul global după definirea clasei.

Clasă - tip de date abstract

După cum puteți vedea, spre deosebire de datele obișnuite ale componentelor, componentele statice ale clasei trebuie definite în continuare în afara definiției clasei. Rețineți că, în mod implicit, valoarea componentei de date statice a tipului încorporat este 0. convertită la tipul corespunzător.

Reamintim aici că constructorii datelor componentelor statice ale clasei în unitatea de traducere sunt chemați înainte ca funcția principal () să fie apelată în ordinea în care sunt definiți. După ieșirea din funcția principală (), destructorii vor fi chemați pentru fiecare obiect în ordine, invers pentru apelurile constructorilor lor.

Deci, componenta statică a memoriei de date este alocată numai după definirea acesteia în afara clasei, și numai după aceea devine disponibilă. Componentele de date statice după definiție pot fi utilizate în program chiar înainte de a defini obiecte din această clasă. De fapt, o componentă de date statică este pur și simplu o variabilă globală al cărei domeniu de aplicare este limitat la clasa în care a fost declarată. Principalul punct de sprijin în C ++ al componentelor statice ale clasei de date este că acum nu este nevoie să se utilizeze variabile globale. În acest sens, nu trebuie să uităm că utilizarea clasei împreună cu variabilele globale aproape întotdeauna încalcă principiul încapsulării. Rețineți, de asemenea, că, în unele cazuri, clasa este utilizată pur și simplu ca domeniu în care numele globale sunt plasate sub forma unor componente statice, astfel încât să nu se încurce spațiul de nume global.







Următoarele nume sunt utilizate pentru a accesa componentele de date statice:

fără a specifica numele obiectului

calificare cu numele obiectului

object_name .class_name. imya_staticheskogo_komponenta_dannyh

O altă modalitate de a accesa componentele de date statice implică utilizarea în mod explicit a unui indicator la un obiect de clasă:

sau folosind operatorul selector de elemente ->

class_name_name_name -> static_component_name

sau cu ajutorul operatorului de dereferențiere * și a operatorului de selecție a membrilor.

Formatul definiției funcției statice a componentei: static type_name static_component_name

Bazele programării orientate pe obiecte în exemplele C ++

Formatul definiției externe a funcției statice:

nume_clasă este numele_clasicii. nume static_component (list_form_file_parameters) <тело_функции>

Funcția statică a componentei păstrează toate caracteristicile de bază ale funcțiilor componente componente (non-statice), adică Acesta poate fi accesat folosind numele unui obiect de clasă existent sau un pointer la un astfel de obiect.

În plus, funcția statică poate fi apelată utilizând calificarea fără a specifica numele obiectului:

class_name. nume static_component (lista de apel_argumente)

Cu această calificare, funcțiile statice ale componentelor pot fi apelate înainte de a defini anumite obiecte de clasă, deoarece aceste funcții nu trebuie să fie accesate pentru ca componentele de date statice să fie solicitate pentru un anumit obiect de clasă.

De exemplu, în următoarea definiție de clasă complexă introduce două componente de clasă statică - un contor de date componente pentru contorizarea numărului creat în clasa de obiect de program complex (proiectantul va efectua incrementarea operație, iar destructor - funcționare decrementing) și funcția componenta get_counterValue (). care va întoarce valoarea contra-contra:

// C ++ Tip de date abstract - număr complex

#include folosind namespace std; struct complex

// Datele componente - toate public (public) double re;

static int counter;







Articole similare

Trimiteți-le prietenilor: