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.
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()