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.

Klasių šablonai<br />

Šio kurso metu mes dažnai naudojome sveikųjų skaičių steką. Nesunku suvokti, kad<br />

lygiai taip pat galime aps<strong>ir</strong>ašyti <strong>ir</strong> kitų bazinių tipų stekus: char, float, double, long <strong>ir</strong><br />

t.t.. Būtų labai varginantis darbas aps<strong>ir</strong>ašyti naują steko klasę kiekvienam baziniam<br />

ar pačių sukonstruotam tipui. Milžiniškas kodo pasikartojimas. Čia mes galime<br />

pasinaudoti klasių šablonais. Visur, kur naudojome žodelį int nusakyti steko<br />

elemento tipui, dabar naudokime šablono parametrą, tipą T:<br />

// stack_template.h<br />

template<br />

class Stack<br />

{<br />

private:<br />

T* elements;<br />

int size;<br />

int capacity;<br />

public:<br />

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

~Stack ();<br />

};<br />

void push (T element);<br />

T pop ();<br />

T peek ();<br />

bool isEmpty () const;<br />

Dabar pilnas klas÷s vardas yra Stack. Jos metodų realizacijos reikalauja prierašo<br />

template:<br />

template<br />

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

{<br />

if (initialCapacity < 1)<br />

initialCapacity = 1;<br />

capacity = initialCapacity;<br />

size = 0;<br />

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

}<br />

...<br />

template<br />

T Stack::pop ()<br />

{<br />

if (size > 0)<br />

return elements[--size];<br />

throw std::string("pop() called on empty stack");<br />

}<br />

Dabar mes galime tur÷ti stekus su norimo tipo elementais:<br />

128

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

Saved successfully!

Ooh no, something went wrong!