C++ за 21 день седьмое издание


CustomException(const char* why):Reason(why) {}



Download 1,38 Mb.
bet420/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   416   417   418   419   420   421   422   423   ...   437
Bog'liq
word1

CustomException(const char* why):Reason(why) {}



1 1 :

  1. // переопределение виртуальной функции для возвращения 'Reason'




  1. virtual const char* what() const throw()




  1. {




  1. return Reason.c_str();




  1. }




  1. };



18:


19: double Divide(double Dividend, double Divisor)

Как действует обработка исключений

617

20: {





  1. if(Divisor == 0)




  1. throw CustomException("CustomException: \ Dividing by 0 is a crime");



23:



  1. return (Dividend / Divisor);




  1. }



26:



  1. int main()




  1. {




  1. cout « "Enter dividend: ";




  1. double Dividend = 0;




  1. cin » Dividend;




  1. cout « "Enter divisor: ";




  1. double Divisor = 0;




  1. cin » Divisor;




  1. try




  1. {




  1. cout « "Result of division is: "




    1. Divide(Dividend, Divisor);




  1. }




  1. catch(exceptions exp) // обрабатывает CustomException,




      1. bad_alloc и т.д.




  1. {




  1. cout « exp.what() « endl;




  1. cout « "Sorry, can't continue!" « endl;




  1. }



44:



  1. return 0;




  1. }



Результат


Enter dividend: 2011


Enter divisor: 0


CustomException: Dividing by 0 is a crime


Sorry, can't continue!


Анализ

Это версия листинга 28.3, который передавал простое исключение типа c h a r * при делении на нуль. Теперь, однако, создается экземпляр класса C u s to m E x c e p tio n , опре­ деленного в строках 5 -17, как производного от класса s t d : : e x c e p tio n . Обратите вни­ мание на то, что наш класс исключения реализует виртуальную функцию w h at () в стро­ ках 13-16, по существу, возвращая причину передачи исключения. Логика обработчика c a tc h ( e x c e p tio n s ) в функции m ain () (строки 39 -43) обрабатывает не только исклю ­ чения класса C u sto m E x c e p tio n , но и других типов, например b a d _ a llo c , у которых тот же базовый класс e x c e p tio n .



  1. ЗАНЯТИЕ 28. Обработка исключений

Обратите внимание на объявление виртуального метода c-ustomException::

what () в строке 13 листинга 28.5:




virtual const char* what() const throw()

Оно заканчивается функцией throw (), означая, что данная функция сама, как ожидается, не передаст исключения - это очень важное и уместное ограниче­ ние для класса, объект которого используется как исключение. Если вы все же вставите оператор throw в эту функцию, то можете ожидать предупреждение от компилятора.


Если объявление функции заканчивается throw ( i n t ) , то это значит, что функ­ ция ожидает передачи исключения типа in t .





РЕКОМЕНДУЕТСЯ

Помните об обработке исключения типа s t d : :ex c ep tio n


Помните о наследовании собственного специ­ ального класса исключения (и любого другого) от класса s t d : : except ion


Передавайте исключения осмотрительно. Они не замена для возвращения таких значений, как tr u e или f a l s e


НЕ РЕКОМЕНДУЕТСЯ

Не передавайте исключения из деструкторов


Не считайте успех резервирования памяти само собой разумеющимся; код, применяющий оператор new, всегда следует заключать в блок t r y и создавать соответствующий обработчик


Не вставляйте сложнуюлогику или резервиро­ вание ресурсов в блок c a tc h (). Нельзя пере­ давать исключения при их обработке



Резюме

На этом занятии вы узнали очень важную часть практического программирования C++. Создание приложений, стабильных вне собственной среды разработки, важно для клиен­ та, как и интуитивно понятные пользователям сообщения. Это именно то, что позволяют сделать исключения. Вы узнали, что код, который резервирует ресурсы или память, может подвести, а следовательно, он требует обработки исключения. Вы узнали, что язык C++ обладает классом исключения s t d : : e x c e p t i o n , а при необходимости создать собствен­ ный специальный класс исключения имеет смысл наследовать его.



Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   416   417   418   419   420   421   422   423   ...   437




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