Fiecare obiect dintr-o clasa detine toate datele membru (atributele) acesteia. Exista insa posibilitatea ca toate instantele unei clase sa detina anumite atribute comune tuturor obiectelor clasei respective. Acesti membri (date, functii) statici au acelasi regim de protectie ca si ceilalti membrii.
Datele membru statice, care urmeaza sa fie utilizate de catre toate obiectele clasei, se definesc prin specificatorul static astfel:
class Nume_clasa
Datele membru statice se declara se initializeaza explicit in afara clasei:
Tip_data_membru Nume_clasa Data_membru Valaore
Referirea (utilizarea) datelor membru statice se poate face astfel:
a) Nume_clasa Data_membru Referire naturala (globala) la clasa
b) Obiect Data_membru . Referire particulara la un obiect
c) Pointer_Obiect >Data_membru . Referire particulara prin pointer
In urmatorul exemplu, se numara cate Puncte sunt utlizate la un moment dat in program, utilizand ca data comuna pentru toate punctele (intreaga clasa) Nr_Ob
Membru Static
# include <conio.h>
# include <iostream.h>
class Punct
Punct (float x,float y)
Punct (Punct& P)
~Punct ()
static int Nr_Ob;
};
int Punct::Nr_Ob=0; se initializeaza
void main (void)
cout << 'i' <<i<< ':'<< Punct::Nr_Ob <<endl; }
cout << 'Final' << Punct::Nr_Ob << endl; getche();
In exemplul urmator, sunt utilizati membri statici a,b,c,d pentru a memora domeniul minim care contine toate punctele curbei (definite parametric) care se deseneaza:
Membri Statici
# include <math.h> # include <conio.h> # include <graphics.h>
# define Cale 'c:BorlandCBgi'
class Grafic
~Grafic( ) };
int u (float);
int v (float);
class Punct
void Atrib (float x,float y)
Punct (Punct& P)
void Muta ()
void Trag ()
~Punct ()
static float a,b, c,d; // Fereastra Reala
};
float Punct::a, Punct::d, Punct::b, Punct::c; // Fereastra Reala
int u1=110, v1=20, u2=500, v2=430; // Fereastra Ecran
int u (float x)
int v (float y)
float x (float t) // x(t)
float y (float t) // y(t)
void main (void)
P[0].Muta(); setcolor(WHITE);
for (i=1; i<=n; i++) P[i].Trag();
Metodele (Functiile membru) statice, actioneaza doar asupra atributelor statice (ale claselor), deci nu pot actiona asupra atributelor obiectului curent (deoarece nu li se transmite poinetrul this). De asemenea ele pot apela doar metodele statice. Pot insa actiona asupra atributelor unui anumit obiect prin operatorii sau > Metodele statice se definesc prin specificatorul static astfel:
class Nume_clasa
Referirea (utilizarea) metodelor statice se face astfel:
a) Nume_clasa Functie_membru Lista_par_actuali Referire naturala la clasa
b) Obiect Functie_membru Lista_par_actuali Referire la un obiect
c) Pointer_Obiect > Functie_membru Lista_par_actuali Referire prin pointer
In urmatorul exemplu, se determina fereastra reala (definita prin cele doua puncte diagonal opuse St_Sus, Dr_Jos) utilizand functiile statice MinX, MaxX, MinY, MaxY pentru a determina domeniul minimal care include punctele din grafic.
Functii Statice
# include <math.h> # include <conio.h> # include <graphics.h>
# define Cale 'c:BorlandCBgi'
class Grafic
~Grafic( ) };
int u (float); int v (float);
class Punct
void Atrib (float x,float y
Punct (Punct& P)
void Muta ()
void Trag ()
~Punct ()
static Punct St_Sus, Dr_Jos; // Fereastra Reala
static float MinX() // Metoda Statica
static float MaxX() // Metoda Statica
static float MinY() // Metoda Statica
static float MaxY() // Metoda Statica
};
Punct Punct::St_Sus, Punct::Dr_Jos; // Fereastra Reala
int u1=110, v1=20, u2=500, v2=430; // Fereastra Ecran
int u (float x)
int v (float y)
float x (float t) // x(t)
float y (float t) // y(t)
void main (void)
P[0].Muta(); setcolor(WHITE); for (i=1; i<=n; i++) P[i].Trag();
|