Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
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