31.12.2014 Views

Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...

Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...

Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Konstruktoriai <strong>ir</strong> destruktoriai<br />

Aps<strong>ir</strong>ašykime steką, kuris dinamiškai didiną elementams sk<strong>ir</strong>tą masyvą. Išsisk<strong>ir</strong>ia<br />

dvi sąvokos: steko dydis – kiek steke yra elementų, <strong>ir</strong> steko talpa – kokio dydžio yra<br />

šiuo metu dinamiškai sukurtas elementų masyvas (nors nebūtinai užpildytas).<br />

class Stack<br />

{<br />

private:<br />

int* elements;<br />

int size;<br />

int capacity;<br />

public:<br />

Stack (int initialCapacity = 4);<br />

~Stack ();<br />

void push (int element);<br />

int pop ();<br />

int peek ();<br />

bool isEmpty ();<br />

};<br />

Sukūrus steko objektą, reikia pas<strong>ir</strong>ūpinti, kad būtų teisingai inicializuoti steko laukai<br />

elements, capacity <strong>ir</strong> size. Tuo tikslu C++ turi specialų metodą - konstruktorių. Jo<br />

tikslas - sukonstruoti objektą, t.y. inicializuoti jo duomenis. Sukūrus klas÷s<br />

egzempliorių (objektą), visuomet yra iškviečiamas konstruktorius - to neįmanoma<br />

išvengti. Konstruktoriaus vardas yra toks pats kaip <strong>ir</strong> klas÷s. Kontstruktorių gali būti<br />

keli, tuomet jie sk<strong>ir</strong>sis argumentų sąrašais (signatūromis). Jie negrąžina jokios<br />

reikšm÷s, netgi void:<br />

Stack::Stack (int initialCapacity)<br />

{<br />

if (initialCapacity < 1)<br />

initialCapacity = 1;<br />

capacity = initialCapacity;<br />

size = 0;<br />

elements = new int [capacity];<br />

}<br />

Naikinant objektą, jis privalo atlaisvinti visus naudojamus bendrus resursus:<br />

dinaminę atmintį, atidarytus failus <strong>ir</strong> t.t.. Tuo tikslu C++ turi specialų metodą -<br />

destruktorių. Sunaikinus klas÷s egzempliorių (objektą), visuomet yra iškviečiamas<br />

destruktorius - to neįmanoma išvengti. Destruktoriaus vardas yra toks pats kaip <strong>ir</strong><br />

klas÷s, tik su bangele priekyje (~). Klas÷ gali tur÷ti tik vieną destruktorių, kuris<br />

neturi jokių argumentų <strong>ir</strong> negrąžina jokios reikšm÷s, netgi void:<br />

Stack::~Stack ()<br />

{<br />

delete[] elements;<br />

}<br />

59

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!