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



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

Спецификации исключений. В заголовке функции можно задать 
список типов исключений, которые она может прямо или косвенно порож-
дать. Этот список приводится в конце заголовка и предваряется ключевым 
словом throw: 
void func(int a) throw (ex_l, ex_2); 
Такое объявление означает, что функция func может сгенерировать 
только исключения ex_lex_2 и исключения, являющиеся производными 
от этих типов. Заголовок является интерфейсом функции, поэтому такое 
объявление дает пользователям функции определенные гарантии. Это 
очень важно при использовании библиотечных функций, так как опреде-
ления функций в этом случае не всегда доступны. 
Если функция сгенерирует исключение, не соответствующее спе-
цификации исключений, то система вызовет обработчик unexpected(),
который может попытаться сгенерировать свое исключение, и если оно 
не будет противоречить спецификации, то продолжится поиск подходя-
щего обработчика, в противном случае вызывается функция terminate(). 
Вместо функции unexpected() можно установить собственную 
функцию, для этого нужно воспользоваться функцией set_unexpected(). 
Если спецификация исключений задана в виде throw(), это озна-
чает, что функция вообще не генерирует исключений. 
Неперехваченные исключения. Если исключение сгенерировано, 
но не перехвачено, вызывается стандартная функция terminate(), по умол-
чанию эта функция вызывает функцию abort(). Результатом выполнения 
функции abort() будет окно с сообщением об аварийном завершении про-
граммы. Вызов функции abort() можно заменить вызовом своего обработ-
чика с помощью функции set_terminate(). 
Исключения в конструкторах. Исключения предоставляют един-
ственную возможность передать информацию об ошибке, случившейся
в процессе создания нового объекта. 
// реализация методов класса intArr 
intArr:: intArr (int n) 


53 

size = n; 
p = new int[n]; // выделение памяти 
if(!p) throw "error in constructor"; // генерирует исключение при 
// ошибке выделения памяти 
for(int i=0;i// заполнение вектора нулевыми 
// элементами 



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




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

    Басты бет