Практикум по объектно-ориентированному программированию на базе языка с++ Учебно-методическое пособие



Pdf көрінісі
бет28/44
Дата21.02.2024
өлшемі0.49 Mb.
#492719
түріПрактикум
1   ...   24   25   26   27   28   29   30   31   ...   44
ООП С

Исключительная ситуация, или исключение – это возникнове-
ние непредвиденного или аварийного события, которое может порож-
даться некорректным использованием аппаратуры. 
Исключения позволяют логически разделить вычислительный 
процесс на две части – обнаружение аварийной ситуации, и ее обработка. 
Другое достоинство исключений состоит в том, что для передачи инфор-
мации об ошибке в вызывающую функцию не требуется применять воз-
вращаемое значение, параметры или глобальные переменные, поэтому 
интерфейс функций не раздувается. Это особенно важно, например, для 
конструкторов, которые по синтаксису не могут возвращать значение. 
Синтаксис исключений. Исключение может генерироваться 
только в контролируемом блоке:  
 
try {…} // контролируемый блок 
Все функции, прямо или косвенно вызываемые из try-блока, также 
принадлежат контролируемому блоку. Генерация (порождение) исключе-
ния происходит по ключевому слову throw, которое употребляется либо 
с параметром, либо без него: 
 
throw [выражение]; // генерация исключения 
50 
Тип выражения, стоящего после throw, определяет тип порождае-
мого исключения. При генерации исключения выполнение текущего 
блока прекращается, и происходит поиск соответствующего обработчика 
и передача ему управления. Как правило, исключение генерируется не 
непосредственно в try-блоке, а в функциях, прямо или косвенно в него 
вложенных. 
Обработчики исключений начинаются с ключевого слова catch
за которым в скобках следует тип обрабатываемого исключения. Они 
должны располагаться непосредственно за try-блоком. Можно записать 
один или несколько обработчиков в соответствии с типами обрабатывае-
мых исключений. 
Существует три формы записи: 
catch(тип имя) {тело обработчика} 
catch(тип) {тело обработчика} 
catch(...) {тело обработчика} 
Первая форма применяется, когда имя параметра используется
в теле обработчика для выполнения каких-либо действий – например,
вывода информации об исключении. Вторая форма не предполагает
использования информации об исключении, играет роль только его тип. 
Многоточие вместо параметра обозначает, что обработчик перехватывает 
все исключения. Так как обработчики просматриваются в том порядке,
в котором они записаны, обработчик третьего типа следует помещать после 
всех остальных. 
Таким образом, для того, чтобы определить исключительную
ситуацию, надо: 
 выделить контролируемый блок; 
 предусмотреть генерацию исключений в этом блоке; 
 разместить обработчики исключений после try-блока. 
Обработка исключения начинается с появления ошибки. Функция, 
в которой она возникла, генерирует исключение (throw с параметром, опре-
деляющим вид исключения). Параметр может быть константой, перемен-
ной или объектом и используется для передачи информации об исключе-
нии его обработчику. Отыскивается соответствующий обработчик исклю-
чения (catch с таким же параметром, как у throw) и ему передается 
управление. 
Если обработчик исключения не найден, вызывается стандартная 
функция terminate, которая вызывает функцию abort, аварийно завершаю-
щую текущий процесс. Можно установить собственную функцию заверше-
ния процесса. 


51 
Когда с помощью throw генерируется исключение, функции биб-
лиотеки C++ выполняют следующие действия: 
 создают копию параметра throw в виде статического объекта, кото-
рый существует до тех пор, пока исключение не будет обработано; 
 в поисках подходящего обработчика раскручивают стек, вызывая
деструкторы локальных объектов, выходящих из области действия; 
 передают объект и управление обработчику, имеющему параметр, 
совместимый по типу с этим объектом. 


Достарыңызбен бөлісу:
1   ...   24   25   26   27   28   29   30   31   ...   44




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет