try kalit so’z nazorat bloki – favqulotda holat paydo bo’lishi mumkin bo’lgan kodni belgilash uchun xizmat qiladi. Blok qayta qavsga olinadi:
try{
…
}
Barcha try – blokdan to’g’ri yoki bilvosita chaqiriluvchi funksiyalar unga tegishli deb hisoblanadi.
Favqulotda holatni paydo bo’lishi (hosil bo’lishi) throw kalit so’zi bilan ro’y beradi, u yo parameter yoki usiz ishlatiladi:
throw [ ifoda ];
throwdan keyin turuvchi ifoda tipi hosil bo’luvchi favqulotda holatni paydo qilishda joriy blokni bajarish tuxtaydi va tegishli qayta ishlovchini izlash va unga boshqaruvni uzatishi ro’y beradi. Odatda favqulotda holat bevosita try – blokda emas, unga to’g’ri yoki bevosita ichki qurilgan funksiyalarda hosil bo’ladi.
Ichki blokda hosil bo’lgan favqulotda holat hamma vaqt ham birdaniga to’g’ri qayta ishlanmaydi. Bu holda ichki qurilgan nazorat bloklari ishlatiladi. Favqulotda holat parametrlarsiz throw kalit so’zi yordamida yanada yuqori saviyaga uzatiladi. Favqulotda holatlar qayta ishlovchilari catch kalit so’zidan boshlanadi, undan keyin qavslarda qayta ishlanuvchi favqulotda holat tipi keladi. Ular bevosita try – blokdan keyin joylashishi lozim.
Qayta ishlanuvchi favqulotda holatlar tipiga mos ravishda bitta yoki bir nechta qayta ishlovchilarni yozish mumkin. Qayta ishlovchilar sintaksisi bir parametrli funksiya ta’rifi – favqulotda holat tipini eslatadi. Yozuvning uchta shakli mavjud:
catch(ism_tipi){ ... /* qayta ishlovchi tanasi */ }
catch(tip){ ... /* qayta ishlovchi tanasi */ }
catch(...){ .. /* qayta ishlovchi tanasi */ }
Birinchi shakl parameter nomi qayta ishlovchi tanasida qandaydir amallarni bajarish uchun – masalan, favqulotda holat haqida ma’lumotni chiqarishuchun foydalanilayotganda qo’llaniladi. Ikkinchi shakl favqulotda holat haqida ma’lumotdan foydalanishni ko’zda tutmaydi, faqat uning tipi rolini bajaradi. Parametr o’rniga ko’p nuqta qayta ishlovchi barcha favqulotda holatlarni ushlab qolayotganini bildiradi. Qayta ishlovchilar ular qanday tartibda yozilgan bo’lsa qaralayotgani uchun uchunchi tip qayta ishlovchisini qolgan barcha tiplardan so’ng joylashtirish kerak. Misol:
catch (int i){
... // int tipidagi favqulotda holatlarni qayta ishlash
}
catch (const char *){
... // const char* tipidagi favqulotda holatlarni qayta ishlash
}
catch (Overflow){
... // Overflow sinf favqulotda holatlarni qayta ishlash
}
catch(...){
... // Barcha xizmat ko’rsatilmagan favqulotda holatlarni qayta ishlash
}
Favqulotda holatni qayta ishlagandan so’ng boshqaruv favqulotda holatlar qayta ishlovchilaridan bevosita keyin turgan birinchi operatorga uzatiladi. Agar favqulotda holat try – blokda hosil qilingan bo’lsa, usha yerga barcha qayta ishlovchilar kodini chetlab o’tib boshqaruv uzatiladi.