Объектно-ориентированное программирование: учебное пособие / В. Н. Казагачев.

Опр. Исключения - возникновение непредвиденных ошибочных условий, например, деление на ноль при операциях с плавающей точкой. Стандартный библиотечный assert.Һ обеспечивает макрокоманду: void assert(int expression); Если expression оценивается как неправильное, тогда выполнение прерывается с выводом диагностики. Подтверждения отбрасываются, если определяется макрокоманда NDEBUG. Рассмотрим конструктор с одним параметром безопасного массива. vect::vect(int п) { if(n<l) { cerr « “ illegal vect size “ « n; exit(l); } size=n; p=new int[size]; } Заменим это на vect::vect(int n) { assert(n > 0); // оговоренное предусловие size=n; p=new int[size]; assert(p!=NULL); // оговоренное постусловие } Использование signal, h Файл signal, h обеспечивает стандартный механизм для непосредственной обработки исключений, определенных системой. Исключения определяются внутри этой библиотеки и представляют собой зависимые от системы значения целых чисел. Пример Udefine SIGINT 2 /* сигнал прерывания */ Hdefine SIGFPE 8 /* исключение операций с плавающей точкой */ ttdefine SIGABRT 22 /* сигнал аварийного прекращения */ Эти исключения может устанавливать система. Например, нажатие control+C на клавиатуре в большинстве систем генерирует прерывание, обычно завершая текущий процесс пользователя. Для того, чтобы генерировать явное исключение, может использоваться функция raise(), прототип которой находится в signal.h raise(SIGFPE);

RkJQdWJsaXNoZXIy MTExODQxMg==