Membri statici ai unei clase

Configurare noua (How To)

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:

Tip solutie

Permanent

Voteaza

(6 din 19 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?