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.