Situatie
Oricare obiect declarat intr-un program, in mod normal, primeste o copie a membrilor clasei la care este asociat. Uneori, este nevoie sa se defineasca unii membrii care sunt folositi in comun de catre toate obiectele clasei. Astfel de membri se numesc membri statici care au proprietati diferite de ceilalti membri nestatici.
Declararea unui membru static presupune precedarea acestuia de cuvantul cheie static:
static tip_membru nume_membru_static;
iar referirea unui membru static se face astfel:
nume_clasa::nume_membru_static;
unde, nume_membru_static poate fi o data sau o functie membru statica
Referirea unui membru static se poate face chiar si inaintea declararii de obiecte ale clasei, in care a fost declarat membru static respectiv, iar initializarea sa se poate face numai in domeniul sau de vizibilitate
Solutie
Pasi de urmat
Se considera o clasa de puncte din spatiu in care se descrie un punct de coordonate fixe M0(x0,y0,z0), reprezentand centrul unei sfere, raza fixa a unei sferei ro si un punct oarecare din spatiu M(x,y,z) si functiile:distanta(M0,M) care determina distanta dintre punctele M0 si M, pozitia_fata_de_centru(M), care determina coordonatele punctului M in raport cu centrul sferei si pozitia(M) care precizeaza pozitia punctului M fata de sfera. Sa se scrie un program care sa sa calculeze distanta dintre punctele M0 si M, coordonatele punctului M fata de centrul sferei si sa determine pozitia punctului M fata de sfera utilizandu-se obiecte din clasa declarata.
#include<iostream.h>
#include<conio.h>
#include<math.h>
// definirea clasei clspunct
class clspunct
{
public:
static int x0,y0,z0,raza;
int x,y,z;
double distanta(void)
{
return(sqrt((x-x0)*(x-x0)+(y-y0)*(y-y0)+(z-z0)*(z-z0)));
}
int poz_x_fata_m0(void)
{
return(x-x0);
}
int poz_y_fata_m0(void)
{
return(y-y0);
}
int poz_z_fata_m0(void)
{
return(z-z0);
}
double poz_m_fata_sfera(void)
{
return(distanta()-raza);
}
};
// initializare datelor statice inainte de
// declararea obiectelor clasei
int clspunct::x0=10;
int clspunct::y0=10;
int clspunct::z0=10;
int clspunct::raza=10;
void main(void)
{
// declararea obiectelor ob1 si ob2
clspunct a;
char r=’d’;
while(r==’d’)
{
cout<<“\n sfera are la inceput raza ” <<a.raza<<” si centrul in M0(“<<a.x0<<‘,'<<a.y0<<‘,'<<a.z0<<“)”;
cout<<“\n coordonatele unui pct (int x,y,z):”;
cin>>a.x>>a.y>>a.z;
cout<<“\n distanta(M0(“<<a.x0<<‘,'<<a.y0<<‘,'<<a.z0<<“),M1(“<<a.x<<‘,'<<a.y<<‘,'<<a.z<<“))=”<<a.distanta();
cout<<“\n coordonatel lui M fata de centru(“<<a.poz_x_fata_m0()<<‘,'<<a.poz_y_fata_m0()<<‘,'<<a.poz_z_fata_m0()<<“)”;
if(a.poz_m_fata_sfera()>0)
cout<<“\n punctul M(“<<a.x<<‘,'<<a.y<<‘,'<<a.z<<“) este exterior sferei”;
if(a.poz_m_fata_sfera()<0)
cout<<“\n punctul M(“<<a.x<<‘,'<<a.y<<‘,'<<a.z<<“) este interior sferei”;
if(a.poz_m_fata_sfera()==0)
cout<<“\n punctul M(“<<a.x<<‘,'<<a.y<<‘,’<<a.z<<“) este pe sfera”;
// se modifica datele statice
a.x0=1;a.y0=1;a.z0=1;a.raza=10;
cout<<“\n sfera modificata are raza “<<a.raza<<” si centrul in M0(“<<a.x0<<‘,'<<a.y0<<‘,'<<a.z0<<“)”;
cout<<“\n distanta(M0(“<<a.x0<<‘,'<<a.y0<<‘,'<<a.z0<<“),M1(“<<a.x<<‘,'<<a.y<<‘,'<<a.z<<“))=”<<a.distanta();
cout<<“\n iar M fata de centru(“<<a.poz_x_fata_m0()<<‘,'<<a.poz_y_fata_m0()<<‘,'<<a.poz_z_fata_m0()<<“)”;
if(a.poz_m_fata_sfera()>0)
cout<<“\n punctul M(“<<a.x<<‘,'<<a.y<<‘,'<<a.z<<“) este exterior sferei”;
if(a.poz_m_fata_sfera()<0)
cout<<“\n punctul M(“<<a.x<<‘,'<<a.y<<‘,'<<a.z<<“) este interior sferei”;
if(a.poz_m_fata_sfera()==0)
cout<<“\n punctul M(“<<a.x<<‘,'<<a.y<<‘,'<<a.z<<“) este pe sfera”;
cout<<“\n continuati?(d/n):”;
cin>>r;
}
}
In urma executarii programului de mai sus, s-au obtinut rezultatele din lista de mai jos, evidentiindu-se declararea si modul de utilizare a membrilor statici precizati in clasa definita.
sfera are la inceput raza 10 si centrul in M0(10,10,10)
coordonatele unui pct (int x,y,z):20 30 40
distanta(M0(10,10,10),M1(20,30,40))=37.4166
coordonatel lui M fata de centru(10,20,30)
punctul M(20,30,40) este exterior sferei
sfera modificata are raza 10 si centrul in M0(1,1,1)
distanta(M0(1,1,1),M1(20,30,40))=52.1824
coordonatel lui M fata de centru(19,29,39)
punctul M(20,30,40) este exterior sferei
continuati?(d/n):d
sfera are la inceput raza 10 si centrul in M0(1,1,1)
coordonatele unui pct (int x,y,z):1 2 3
distanta(M0(1,1,1),M1(1,2,3))=2.23607
coordonatel lui M fata de centru(0,1,2)
punctul M(1,2,3) este interior sferei
sfera modificata are raza 10 si centrul in M0(1,1,1)
distanta(M0(1,1,1),M1(1,2,3))=2.23607
coordonatel lui M fata de centru(0,1,2)
punctul M(1,2,3) este interior sferei
continuati?(d/n):d
sfera are la inceput raza 10 si centrul in M0(1,1,1)
coordonatele unui pct (int x,y,z):-10 -20 20
distanta(M0(1,1,1),M1(-10,-20,20))=30.3809
coordonatel lui M fata de centru(-11,-21,19)
punctul M(-10,-20,20) este exterior sferei
sfera modificata are raza 10 si centrul in M0(1,1,1)
distanta(M0(1,1,1),M1(-10,-20,20))=30.3809
coordonatel lui M fata de centru(-11,-21,19)
punctul M(-10,-20,20) este exterior sferei
continuati?(d/n):n
Spre deosebire de o functie membru nestatica, o functie membru statica poate fi apelata cu sau fara sintaxa specifica unei functii membru:
Leave A Comment?