Destruktorët

Destruktorët

Me qëllim të lirimit të hapësirës memoruese, të cilën e shfrytëzon një
objekt, pasi objekti më nuk nevojitet, brenda klasës definohet një funksion i
veçantë, i cili njihet si destruktor. Si konstruktori, edhe emri i destruktorit është I njëjtë me emrin e klasës, por para tij vendoset simboli ~. Brenda kllapave të
trupit të destruktorit vendoset komanda delete, në vazhdim të së cilës
shënohen variablat e klasës të cilat duhet të fshihen, të ndara mes vete me presje.
Kështu, p.sh., destruktori që vendoset brenda klasës Alfa mund ta ketë formën:

~ Class Alfa()
 { 
 cout << "Aktivizimi i destruktorit";
          delete m, a;
 }
Destruktori mund të shfrytëzohet vetëm për fshirje të objekteve të
deklaruara si pointer.
Kur përfundon ekzekutimi i programit, nëse nuk shfrytëzohen destruktorë,
kompjuteri automatikisht i fshin objektet e shfrytëzuara brenda tij. Prandaj, edhe
shfrytëzimi i destruktorëve te programet e zakonshme nuk ka ndonjë rëndësi të
veçantë.

Disa klasa njëkohësisht

Një program mund të përmbajë edhe disa klasa njëkohësisht. Për definimin dhe shfrytëzimin e tyre vlejnë rregullat sikur edhe për një klasë të vetme. 

Shembull:  Programi classK2, përmes së cilit llogariten sipërfaqja sd dhe
perimetri pd i drejtkëndëshit me brinjët a dhe b, si dhe
sipërfaqja sr dhe perimetri pr i rrethit me rreze r. Gjatë llogaritjeve shfrytëzohen dy klasa të veçanta drejtk dhe rrethi, në komponentet private të së cilave ruhen brinjët e drejtkëndëshit dhe konstantja pi me rrezen r të rrethit. 

Kurse, funksionet për marrjen e vlerave të nevojshme (vleratD dhe
vleratR), si dhe funksionet për llogaritje (llogaritD dhe
llogaritR) janë definuar si anëtarë publikë të klasave.

// Programi classK2

    class drej

 {
 private:
 double a,b;
 public:
 void vleratD(double x,double y);
 void llogaritD();
 };
 class rrethi
 {
 private:
 double pi,r;
 public:
 void vleratR(double x,double y);
 void llogaritR();
 };
 int main()
 {
 drejtk D;
 rrethi R;
 D.vleratD(7,4);
 D.llogaritD();
 R.vleratR(3.1415926,5);
 R.llogaritR();
 return 0;
 }
 void drejtk::vleratD(double x,double y)
 {
 a=x;
 b=y;
 cout << "\nBrinjët e drejtkëndëshit"
 << "\n\nBrinja a="
 << a
 << "\nBrinja b="
 << b
 << "\n";
 }
 void drejtk::llogaritD()
 {
 double sd,pd;
 sd=a*b;
 pd=2*(a+b);
 cout << "\nSipërfaqja e drejtkëndëshit sd=" 
 << sd
     << "\nPerimetri i drejtkëndëshit pd="
     << pd
    << "\n";
    }
 void rrethi::vleratR(double x,double y)
 {
 pi=x;
 r=y;
 cout << "\nRrezja e rrethit r="
 << r
 << "\n";
 }
 void rrethi::llogaritR()
 {
 double sr,pr;
 sr=pi*r*r;
 pr=2*pi*r;
 cout << "\nSipërfaqja e rrethit sr="
 << sr
 << "\nPerimetri i rrethit pr="
 << pr
 << "\n\n";
 }

Te funksionet e veçanta të përfshira në klasa janë shfrytëzuar edhe
komanda për shtypje të vlerave hyrëse si dhe vlerat e rezultateve që fitohen gjatë
llogaritjeve. Në këtë mënyrë, programi kryesor është thjeshtuar krejtësisht. Në të
fillimisht deklarohen objektet D dhe R:
drejtk D;
rrethi R;
të klasave drejtk dhe rrethi. Pastaj janë thirrur funksionet:
D.vleratD(7,4);
D.llogaritD();
R.vleratR(3.1415926,5);
R.llogaritR();
për marrje të vlerave, llogaritje dhe shtypje të rezultateve.

Ngjashëm si në shembullin e mësipërm, në një program mund të
definohen dhe të shfrytëzohen edhe më shumë klasa njëkohësisht.

Kategoria:Shkencë kompjuterike