Задача этой книги дать краткое и четкое изложение языка С++ в соответствии со стандар том iso/iec 14882. Она предназначена для студентов, изучающих язык «с нуля»


Исключения в конструкторах и деструкторах



Download 2 Mb.
bet136/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   132   133   134   135   136   137   138   139   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

Исключения в конструкторах и деструкторах


ßçûê C++ íå ïîçâîëяåò âîçâðaùaòü çía÷åíèå èç êîíñòðóêòîða è äåñòðóêòîða. Ìåõaíèçì èñêëþ÷åíèé äaåò âîçìîæíîñòü ñîîáùèòü îá îøèáêå, âîçíèêøåé â êîí- ñòðóêòîðå èëè äåñòðóêòîðå îáúåêòa. Äëя èëëþñòðaöèè ñîçäaäèì êëaññ VeCtOr, â êîòîðîì îãðaíè÷èâaåòñя êîëè÷åñòâî çaïðaøèâaåìîé ïaìяòè:
Class VeCtOr{ publiC:
Class Size{}; // Êëaññ èñêëþ÷åíèя
enum {max = 32000}; // Ìaêñèìaëüíaя äëèía âåêòîða VeCtOr(int n) // Êîíñòðóêòîð
{ if (n<0 || n>max) thrOw Size(); … }

};
Ïðè èñïîëüçîâaíèè êëañña VeCtOr ìîæíî ïðåäóñìîòðåòü ïåðåõâaò èñêëþ÷åíèé òèïa Size:
try{
VeCtOr *p = new VeCtOr(i);

}

CatCh(VeCtOr::Size){


… // Îáðaáîòêa îøèáêè ðaçìåða âåêòîða
}
 îáðaáîò÷èêå ìîæåò èñïîëüçîâaòüñя ñòaíäaðòíûé íaáîð îñíîâíûõ ñïîñîáîâ âû- äa÷è ñîîáùåíèé îá îøèáêå è âîññòaíîâëåíèя. Âíóòðè êëañña, îïðåäåëяþùåãî èñ- êëþ÷åíèå, ìîæåò õðaíèòüñя èíôîðìaöèя îá èñêëþ÷åíèè, êîòîðaя ïåðåäaåòñя îá- ðaáîò÷èêó. Cìûñë ýòîé òåõíèêè çaêëþ÷aåòñя â òîì, ÷òîáû îáåñïå÷èòü ïåðåäa÷ó èíôîðìaöèè îá îøèáêå èç òî÷êè åå îáíaðóæåíèя â ìåñòî, ãäå äëя îáðaáîòêè îøèáêè èìååòñя äîñòaòî÷íî âîçìîæíîñòåé.
Åñëè â êîíñòðóêòîðå îáúåêòa ãåíåðèðóåòñя èñêëþ÷åíèå, aâòîìaòè÷åñêè âûçûâa- þòñя äåñòðóêòîðû äëя ïîëíîñòüþ ñîçäaííûõ â ýòîì áëîêå ê òåêóùåìó ìîìåíòó îáúåêòîâ, a òaêæå äëя ïîëåé äaííûõ òåêóùåãî îáúåêòa, яâëяþùèõñя îáúåêòaìè, è äëя åãî áaçîâûõ êëaññîâ. Íaïðèìåð, åñëè èñêëþ÷åíèå âîçíèêëî ïðè ñîçäaíèè ìaññèâa îáúåêòîâ, äåñòðóêòîðû áóäóò âûçâaíû òîëüêî äëя óñïåøíî ñîçäaííûõ ýëåìåíòîâ.
Åñëè îáúåêò ñîçäaåòñя â äèíaìè÷åñêîé ïaìяòè ñ ïîìîùüþ îïåðaöèè new è â êîí- ñòðóêòîðå âîçíèêíåò èñêëþ÷åíèå, ïaìяòü èç-ïîä îáúåêòa êîððåêòíî îñâîáîæäa- åòñя.


Иерархии исключений


Èñïîëüçîâaíèå ñîáñòâåííûõ êëaññîâ èñêëþ÷åíèé ïðåäïî÷òèòåëüíåå ïðèìåíåíèя ñòaíäaðòíûõ òèïîâ äaííûõ. C ïîìîùüþ êëaññîâ ìîæíî áîëåå ãèáêî îðãaíèçîâaòü ïåðåäa÷ó èíôîðìaöèè îá èñêëþ÷åíèè, ëåã÷å äèôôåðåíöèðîâaòü îáðaáîòêó èñêëþ-
÷åíèé, a êðîìå òîãî, ïîяâëяåòñя âîçìîæíîñòü èñïîëüçîâaòü èåðaðõèè êëaññîâ.
Ïîñêîëüêó ìåõaíèçì óïðaâëåíèя èñêëþ÷åíèяìè ïîçâîëяåò ñîçäaòü îáðaáîò÷èê äëя áaçîâîãî êëañña, ðîäñòâåííûå èñêëþ÷åíèя ÷añòî ìîæíî ïðåäñòaâèòü â âèäå èåðaðõèè. Ïðîèçâîäя èñêëþ÷åíèя îò îáùåãî áaçîâîãî êëañña, ìîæíî â îáðaáîò-
÷èêå ïåðåõâaòûâaòü ññûëêó èëè óêaçaòåëü ía áaçîâûé êëaññ, èñïîëüçóя ïîëèìîð- ôèçì. Íaïðèìåð, â ìaòåìaòè÷åñêîé áèáëèîòåêå ìîæíî îðãaíèçîâaòü êëaññû ñëå- äóþùèì îáðaçîì:
Class Matherr{};
Class OverflOw: publiC Matherr{}; // Ïåðåïîëíåíèå
Class UnderflOw: publiC Matherr{}; // Èñ÷åçíîâåíèå ïîðяäêa Class ZerODivide: publiC Matherr{}; // Äåëåíèå ía íîëü
Äëя ïðåäñòaâëåíèя îøèáîê ââîäa/âûâîäa ìîãóò èñïîëüçîâaòüñя ñëåäóþùèå êëaññû:
Class IOerr{};
Class Readerr: publiC IOerr{}; // Îøèáêa ÷òåíèя Class Writerr: publiC IOerr{}; // Îøèáêa çaïèñè Class Seekerr: publiC IOerr{}; // Îøèáêa ïîèñêa
 çaâèñèìîñòè îò îáñòîяòåëüñòâ ìîæíî èñïîëüçîâaòü ëèáî îáðaáîò÷èê èñêëþ÷å- íèé áaçîâîãî êëañña, êîòîðûé áóäåò ïåðåõâaòûâaòü è ïðîèçâîäíûå èñêëþ÷åíèя, ëèáî ñîáñòâåííûå îáðaáîò÷èêè ïðîèçâîäíûõ êëaññîâ.

Cóùåñòâóåò ðяä ñòaíäaðòíûõ èñnëþ÷åíèñ, êîòîðûå ãåíåðèðóþòñя îïåðaöèяìè èëè ôóíêöèяìè C++ (ñì. ãëaâó 16 «Äðóãèå ñðåäñòâa ñòaíäaðòíîé áèáëèîòåêè», ñ. 378). Âñå îíè яâëяþòñя ïðîèçâîäíûìè îò áèáëèîòå÷íîãî êëañña exCeptiOn, îïè- ñaííîãî â çaãîëîâî÷íîì ôaéëå . Íaïðèìåð, îïåðaöèя new ïðè íåóäa÷- íîì âûäåëåíèè ïaìяòè ãåíåðèðóåò èñêëþ÷åíèå òèïa bad_allOC.


Ïðîãðaììèñò ìîæåò îïðåäåëèòü ñîáñòâåííûå èñêëþ÷åíèя, ïðîèçâîäíûå îò ñòaí- äaðòíûõ.

Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   132   133   134   135   136   137   138   139   ...   232




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