Alt linux Программирование на языке С++ в среде Qt Creator Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк, О. В. Чеснокова, А. С. Чмыхало Москва alt linux 2015



Download 5,27 Mb.
Pdf ko'rish
bet139/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   135   136   137   138   139   140   141   142   ...   193
Bog'liq
Book-qtC


Глава 10. Объектно-ориентированное программирование
функцию unexpected() или функцию terminate() — или сразу обе — на свои
собственные, изменив таким образом обработку неспецифицированных исклю-
чений. Для такой замены нужно вызвать специальные библиотечные функции
set_unexpected()
и set_terminate(), передав им адреса новых функций в ка-
честве аргументов. Наглядно можно увидеть действие этих функций в примере
из раздела 10.4.2, в котором не перехватывается исключение general_error. Это
исключение выбрасывается в примере конструктором класса array в том случае,
если пользователь попытается создать массив нулевой ёмкости. Оно оказывается
необработанным, т. к. создание массива находится за пределом блока try. К со-
жалению, стандартная функция не может знать о структуре класса-индикатора,
и потому текстовое сообщение, оставленное конструктором, оказывается невос-
требованным. Программа сообщает имя неперехваченного класса-индикатора,
после чего выполняет аварийное завершение работы.
10.5.5
Стандартные классы — индикаторы исключений
Стандартная библиотека C++ содержит иерархию стандартных классов-
индикаторов исключений (рис. 10.5), объявленных в заголовочном файле
stdexcept
. Эти индикаторы можно использовать в собственных программах.
Рис. 10.5: Предопределённые индикаторы исключений
Назначение каждого класса-индикатора представлено в табл. 10.3.
Таблица 10.3: Стандартные классы-индикаторы исключений
Исключение
Описание
exception
базовый класс для всех стандартных исключений
C++
bad_alloc
неудача выделения памяти; может генерироваться
оператором new
bad_cast
ошибка динамического приведения типов, генериру-
ется dynamic_cast
Программирование на языке С++ в среде Qt Creator


10.5. Обработка исключений
315
Таблица 10.3 — продолжение
Исключение
Описание
bad_exception
предназначено для обработки непредусмотренных
исключений в программе
bad_typeid
генерируется оператором typeid (оператор, возвра-
щающий имя типа, которому принадлежит аргу-
мент), если не удаётся определить тип объекта
logic_error
исключение, связанное с ошибкой в логике работы
программы, которая, теоретически, может быть об-
наружена при чтении кода
domain_error
генерируется при выходе из математической области
допустимых значений
invalid_argument
генерируется при получении недопустимого аргу-
мента
length_error
генерируется при попытке создания слишком длин-
ной строки
out_of_range
выход индекса за допустимую границу
runtime_error
исключение, связанное с ошибкой, которая, теорети-
чески, не может быть обнаружена при чтении кода
overflow_error
генерируется при обнаружении математического пе-
реполнения
range_error
генерируется при попытке сохранить значение, вы-
ходящее за границы допустимого диапазона
underflow_error
генерируется при математической ошибке исчезно-
вения порядка
Базовый класс exception содержит конструктор по умолчанию, конструктор
копирования, деструктор, перегруженный оператор присваивания, а также един-
ственный метод what(), возвращающий ASCIIZ-строку с человеко-читаемым
описанием исключительной ситуации. Классы-потомки могут добавлять к этому
свой собственный функционал, в зависимости от типа ошибок, для обработки
которых они предназначены. Однако стандартные классы-индикаторы по суще-
ству являются простыми обёртками над exception, ограничиваясь возможно-
стью указать конструктору класса-индикатора сообщение, которое должен воз-
вращать метод what().
Воспользуемся в следующем примере двумя стандартными классами-
индикаторами:
• выбрасываемым автоматически при выходе индекса за пределы строки
(воспользуемся классом string из стандартной библиотеки);
• выбрасываемым при ошибке в ходе выполнения (соответствующее исклю-
чение будем генерировать сами).
#include 
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


316
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   135   136   137   138   139   140   141   142   ...   193




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish