С++ для начинающих




Try-блок


В нашей программе тестируется определенный в предыдущем разделе класс iStack и его функции-члены pop() и push(). Выполняется 50 итераций цикла for. На каждой итерации в стек помещается значение, кратное 3: 3, 6, 9 и т.д. Если значение кратно 4 (4, 8, 12...), то выводится текущее содержимое стека, а если кратно 10 (10, 20, 30...), то с вершины снимается один элемент, после чего содержимое стека выводится снова. Как нужно изменить функцию main(), чтобы она обрабатывала исключения, возбуждаемые функциями-членами класса iStack?

#include <iostream>

#include "iStack.h"

int main() {

   iStack stack( 32 );

   stack.display();

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

   {

             if ( ix % 3 == 0 )

          stack.push( ix );

             if ( ix % 4 == 0 )

                stack.display();

             if ( ix % 10  == 0 ) {

                int dummy;

                stack.pop( dummy );

                stack.display();

             }

   }

   return 0;

}

Инструкции, которые могут возбуждать исключения, должны быть заключены в 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 ) { ... }

}

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




Содержание  Назад  Вперед