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



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

Перехват исключений


Êîãäa ñ ïîìîùüþ thrOw ãåíåðèðóåòñя èñêëþ÷åíèå, ôóíêöèè èñïîëíèòåëüíîé áèáëèîòåêè C++ âûïîëíяþò ñëåäóþùèå äåéñòâèя:

  1. ñîçäaþò êîïèþ ïaðaìåòða thrOw â âèäå ñòaòè÷åñêîãî îáúåêòa, êîòîðûé ñóùåñò- âóåò äî òåõ ïîð, ïîêa èñêëþ÷åíèå íå áóäåò îáðaáîòaíî;

  2. â ïîèñêaõ ïîäõîäяùåãî îáðaáîò÷èêa ðañêðó÷èâaþò ñòåê, âûçûâaя äåñòðóêòî- ðû ëîêaëüíûõ îáúåêòîâ, âûõîäяùèõ èç îáëañòè äåéñòâèя;

  3. ïåðåäaþò îáúåêò è óïðaâëåíèå îáðaáîò÷èêó, èìåþùåìó ïaðaìåòð, ñîâìåñòè- ìûé ïî òèïó ñ ýòèì îáúåêòîì.

Ïðè ðañêðó÷èâaíèè ñòåêa âñå îáðaáîò÷èêè ía êaæäîì óðîâíå ïðîñìaòðèâaþòñя ïîñëåäîâaòåëüíî, îò âíóòðåííåãî áëîêa ê âíåøíåìó, ïîêa íå áóäåò íaéäåí ïîäõî- äяùèé îáðaáîò÷èê.
Îáðaáîò÷èê ñ÷èòaåòñя íaéäåííûì, åñëè òèï îáúåêòa, óêaçaííîãî ïîñëå thrOw:

  • òîò æå, ÷òî è óêaçaííûé â ïaðaìåòðå CatCh (ïaðaìåòð ìîæåò áûòü çaïèñaí â ôîðìå T, COnst T, T& èëè COnst T&, ãäå T— òèï èñêëþ÷åíèя);

  • яâëяåòñя ïðîèçâîäíûì îò óêaçaííîãî â ïaðaìåòðå CatCh (åñëè íañëåäîâaíèå ïðîèçâîäèëîñü ñ êëþ÷îì äîñòóïa publiC);

  • яâëяåòñя óêaçaòåëåì, êîòîðûé ìîæåò áûòü ïðåîáðaçîâaí ïî ñòaíäaðòíûì ïða- âèëaì ïðåîáðaçîâaíèя óêaçaòåëåé ê òèïó óêaçaòåëя â ïaðaìåòðå CatCh.

Èç âûøåèçëîæåííîãî ñëåäóåò, ÷òî îáðaáîò÷èêè ïðîèçâîäíûõ êëaññîâ ñëåäóåò ðaçìåùaòü äî îáðaáîò÷èêîâ áaçîâûõ, ïîñêîëüêó â ïðîòèâíîì ñëó÷aå èì íèêîãäa íå áóäåò ïåðåäaíî óïðaâëåíèå. Îáðaáîò÷èê óêaçaòåëя òèïa vOid aâòîìaòè÷åñêè ñêðûâaåò óêaçaòåëü ëþáîãî äðóãîãî òèïa, ïîýòîìó åãî òaêæå ñëåäóåò ðaçìåùaòü ïîñëå îáðaáîò÷èêîâ óêaçaòåëåé êîíêðåòíîãî òèïa.
Ðaññìîòðèì ïðèìåð.
inClude Class HellO{
// Êëaññ, èíôîðìèðóþùèé î ñâîåì ñîçäaíèè è óíè÷òîzåíèè publiC:
HellO(){COut << "HellO!" << endl;}
~HellO(){COut << "Bye!" << endl;}
};
vOid f1(){
ifstream ifs("\\INVALID\\FILE\\NAME"); // Îòêðûâaåì ôaéë if (!ifs){
COut << "Ãåíåðèðóåì èñêëþ÷åíèå" << endl; thrOw "Îøèáêa ïðè îòêðûòèè ôaéëa";}
}
vOid f2(){
HellO H; // Cîçäaåì ëîêaëüíûé îáúåêò
f1(); // Âûçûâaåì ôóíêöèþ, ãåíåðèðóþùóþ èñêëþ÷åíèå
}
int main(){

try{
COut << "Âõîäèì â try-áëîê" << endl; f2();


COut << "Âûõîäèì èç try-áëîêa" << endl;
}
CatCh(int i){
COut << "Âûçâaí îáðaáîò÷èê int, èñêëþ÷åíèå-" <}
CatCh(COnst Char * p){
COut << "Âûçâaí îáðaáîò÷èê COnst Char*, èñêëþ÷åíèå - "
<< p << endl; return –1;
}
CatCh(¼){
COut << "Âûçâaí îáðaáîò÷èê âñåõ èñêëþ÷åíèé" << endl; return –1;
}
return 0; // Âñå îáîøëîñü áëaãîïîëó÷íî
}
Ðåçóëüòaòû âûïîëíåíèя ïðîãðaììû:
Âõîäèì â try-áëîê HellO!
Ãåíåðèðóåì èñêëþ÷åíèå Bye!
Âûçâaí îáðaáîò÷èê COnst Char *, èñêëþ÷åíèå - Îøèáêa ïðè îòêðûòèè ôaéëa
Îáðaòèòå âíèìaíèå, ÷òî ïîñëå ïîðîæäåíèя èñêëþ÷åíèя áûë âûçâaí äåñòðóêòîð ëîêaëüíîãî îáúåêòa, õîòя óïðaâëåíèå èç ôóíêöèè f1 áûëî ïåðåäaíî îáðaáîò÷èêó, íaõîäяùåìóñя â ôóíêöèè main. Cîîáùåíèå «Âûõîäèì èç try-áëîêa» íå áûëî âû- âåäåíî. Äëя ðaáîòû ñ ôaéëîì â ïðîãðaììå èñïîëüçîâaëèñü ïîòîêè (î íèõ ðaññêa- çûâaåòñя â ãëaâå 10 «Ïîòîêîâûå êëaññû» ía ñ. 265).
Òaêèì îáðaçîì, ìåõaíèçì èñêëþ÷åíèé ïîçâîëяåò êîððåêòíî óíè÷òîæaòü îáúåêòû ïðè âîçíèêíîâåíèè îøèáî÷íûõ ñèòóaöèé. Ïîýòîìó âûäåëåíèå è îñâîáîxäåíèå ðå- ñóðñîâ ïîëåçíî îôîðìëяòü â âèäå në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áîòå ñ êîòîðûì îíî ìîæåò âîçíèêaòü. Êîíñòðóêòîð êîïèðî- âaíèя ýòîãî êëañña äîëæåí áûòü îáúяâëåí êaê publiC, ïîñêîëüêó èía÷å áóäåò íå- âîçìîæíî ñîçäaòü êîïèþ îáúåêòa ïðè ãåíåðaöèè èñêëþ÷åíèя (êîíñòðóêòîð êîïè- ðîâaíèя, ñîçäaâaåìûé ïî óìîë÷aíèþ, èìååò ñïåöèôèêaòîð publiC).



Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   130   131   132   133   134   135   136   137   ...   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