Destruktorët

Nga Wikipedia, enciklopedia e lirë

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.