Читаем C++ для начинающих полностью

Инструкции, которые могут возбуждать исключения, должны быть заключены в try-блок. Такой блок начинается с ключевого слова try, за которым идет последовательность инструкций, заключенная в фигурные скобки, а после этого – список обработчиков, называемых catch-предложениями. Try-блок группирует инструкции программы и ассоциирует с ними обработчики исключений. Куда нужно поместить try-блоки в функции main(), чтобы были обработаны исключения popOnEmpty и pushOnFull?

for ( int ix = 1; ix 51; ++ix ) {

try { // try-блок для исключений pushOnFull

if ( ix % 3 == 0 )

stack.push( ix );

}

catch ( pusOnFull ) { ... }

if ( ix % 4 == 0 )

stack.display();

try { // try-блок для исключений popOnEmpty

if ( ix % 10 == 0 ) {

int dummy;

stack.pop( dummy );

stack.display();

}

}

catch ( popOnEmpty ) { ... }

}

В таком виде программа выполняется корректно. Однако обработка исключений в ней перемежается с кодом, использующимся при нормальных обстоятельствах, а такая организация несовершенна. В конце концов, исключения – это аномальные ситуации, возникающие только в особых случаях. Желательно отделить код для обработки аномалий от кода, реализующего операции со стеком. Мы полагаем, что показанная ниже схема облегчает чтение и сопровождение программы:

try {

for ( int ix = 1; ix

С try-блоком ассоциированы два catch-предложения, которые

могут обработать исключения pushOnFull и popOnEmpty, возбуждаемые

функциями-членами push() и pop() внутри этого блока. Каждый catch-обработчик

определяет тип "своего" исключения. Код для обработки исключения помещается

внутрь составной инструкции (между фигурными скобками), которая является частью

catch-обработчика. (Подробнее catch-предложения мы рассмотрим в следующем разделе.)

Исполнение программы может пойти по одному из следующих путей:

если исключение не возбуждено, то выполняется код внутри try-блока, а ассоциированные

* с ним обработчики игнорируются. Функция main() возвращает 0;

если функция-член push(), вызванная из первой инструкции if внутри цикла for,

возбуждает исключение, то вторая и третья инструкции if игнорируются,

управление покидает цикл for и try-блок, и выполняется обработчик исключений

* типа pushOnFull;

если функция-член pop(), вызванная из третьей инструкции if внутри

цикла for, возбуждает исключение, то вызов display() игнорируется,

управление покидает цикл for и try-блок, и выполняется обработчик исключений

* типа popOnEmpty.

Когда возбуждается исключение, пропускаются все инструкции,

следующие за той, где оно было возбуждено. Исполнение программы

возобновляется в catch-обработчике этого исключения. Если такого

обработчика не существует, то управление передается в функцию terminate(),

определенную в стандартной библиотеке C++.

Try-блок может содержать любую инструкцию языка

C++: как выражения, так и объявления. Он вводит локальную

область видимости, так что объявленные внутри него переменные

недоступны вне этого блока, в том числе и в catch-обработчиках.

Например, функцию main() можно переписать так, что объявление переменной

stack окажется в try-блоке. В таком случае обращаться к этой переменной в

catch-обработчиках нельзя:

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных