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.

Sk<strong>ir</strong>tingų klaidų gaudymas<br />

Metamomis klaidomis gali būti bet kokio tipo objektai, pvz. jūsų aprašytos klas÷s ar<br />

bazinių C++ tipų int, char, float <strong>ir</strong> t.t.. Klas÷ms yra reikalavimas, kad jos tur÷tų<br />

kopijavimo konstruktorių, nes išmesta klaida, skriedama per funkcijų <strong>ir</strong> metodų<br />

kvietimo steką, pakeliui gali būti kopijuojama. Plačiai paplitusi praktika: kiekvienam<br />

klaidos tipui aps<strong>ir</strong>ašyti po klasę, nešančia visą reikiamą informaciją apie klaidą.<br />

try-bloko viduje sk<strong>ir</strong>tingose vietose gali būti išmestos sk<strong>ir</strong>tingų tipų klaidos. Jas<br />

galima pagauti naudojant vieną paskui kitą einančius catch-blokus su atitinkamais<br />

parametrais. Be to, galima naudoti catch-bloką su daugtaškiu vietoje parametro,<br />

kuris pagauna visų tipų klaidas. Pavyzdžiui, turime aritmetinių išraiškų parserį, kuris<br />

tekstinę eilutę paverčia atitinkamu išraiškos objektu. Pastarasis turi metodą,<br />

grąžinantį išraiškos rezultatą, kaip double tipo reikšmę. Parseris gali išmesti klaidą,<br />

apie neteisingai užrašytą aritmetinę išraišką, o išraiškos objektas gali išmesti dalybos<br />

iš nulio klaidą:<br />

Expression* exp = NULL;<br />

try<br />

{<br />

Parser parser;<br />

exp = parser.parseString("12 + 3*(9-5)");<br />

cout getValue()

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

Saved successfully!

Ooh no, something went wrong!