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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Šablonas gali tur÷ti parametrus su reikšm÷mis pagal nutyl÷jimą:<br />

Pvz., aps<strong>ir</strong>ašykime bendrą simbolių palyginimo klas÷s šabloną, parametrizuojamą<br />

simbolio tipu:<br />

template class Comparator<br />

{<br />

public:<br />

static bool equal (T a, T b) {return T == T;}<br />

static bool less (T a, T b) {return T < T;}<br />

};<br />

Jį galime panaudoti, kaip parametrą pagal nutyl÷jimą kitame šablone - funkcijoje<br />

compare. Atkreipkime d÷mesį, kad žemiau esantys tekstinių eilučių šablonai naudoja<br />

simbolio tipo parametrą T. Čia tam atvejui, jei mums reik÷s vieno baito simbolių<br />

(char) eilučių arba dviejų baitų simbolių (wchar_t) eilučių:<br />

template<br />

int compare (const String& a, const String& b) {...}<br />

Tuomet funkciją compare galime naudoti keliais būdais:<br />

int result1 = compare(str1, str2); // Comparator<br />

int result2 = compare(str1, str2); // Comparator<br />

int result3 = compare(str1, str2);<br />

Pavyzdžiui, standartin÷je bibliotekoje, kuomet naudojami įva<strong>ir</strong>ių tipų elementų<br />

konteineriai, naudojamas šablono parametras allocator, atsakingas už naujų<br />

elementų išskyrimą <strong>ir</strong> sunaikinimą. Pagal nutyl÷jimą jis realizuotas operatorių new <strong>ir</strong><br />

delete pagalba.<br />

Šablonus galima specializuoti:<br />

Pvz., turint steko šabloną su elemento tipo parametru T, galime aps<strong>ir</strong>ašyti jo<br />

specializaciją, kuomet parametras yra rodykl÷ į T. Arba galime pateikti jo<br />

efektyvesnę specializaciją konkrečiam tipui, kai T yra kažkoks MyType:<br />

template class Stack {...}; // bedras visiems<br />

template class Stack {...}; // specializacija tipui<br />

// MyType<br />

Specializuoti galima <strong>ir</strong> funkcijų šablonus.<br />

Klas÷s nariai-šablonai:<br />

Klas÷s-šablono nev<strong>ir</strong>tualūs metodai patys savo ruožtu gali būti metodai-šablonai su<br />

papildomu nuosavu šablono parametru:<br />

131

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

Saved successfully!

Ooh no, something went wrong!