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.*