В программе можно объявить блок, в котором мы будем отслеживать исключительные ситуации с помощью операторов try и catch :
try { ...}catch (тип_исключительной_операции){ ...} Если внутри блока try возникла исключительная ситуация, то она первым делом передается в оператор catch . Тип исключительной ситуации – это тип аргумента throw . Если тип исключительной ситуации совместим с типом аргумента catch , выполняется блок catch . Тип аргумента catch совместим, если он либо совпадает с типом ситуации, либо является одним из ее базовых типов. Если тип несовместим, то происходит описанный выше откат вызовов, до тех пор, пока либо не завершится программа, либо не встретится блок catch с подходящим типом аргумента.
В блоке catch происходит обработка исключительной ситуации.
foo(){ Database database; int attempCount =0;again: try { database.Open("dbserver"); } catch (int& x){ cerr <<"Ошибка соединения номер " <<x <<endl; if (++attemptCount <5) goto again; throw ; } String y; ...} Ссылка на аргумент throw передается в блок catch . Этот блок гасит исключительную ситуацию. Во время обработки в блоке catch можно создать либо ту же самую исключительную ситуацию с помощью оператора throw без аргументов, либо другую, или же не создавать никакой. В последнем случае исключительная ситуация считается погашенной, и выполнение программы продолжается после блока catch .
С одним блоком try может быть связано несколько блоков catch с разными аргументами. В этом случае исключительная ситуация последовательно "примеряется" к каждому catch до тех пор, пока аргумент не окажется совместимым. Этот блок и выполняется. Специальный вид catch
catch (...) совместим с любым типом исключительной ситуации. Правда, в него нельзя передать аргумент.