throw
түйінді сөзінен кейін көрсетілген объектінің типі
төмендегілердің біріне сəйкес келсе:
■
catch
параметрінде көрсетілген типпен бірдей болғанда (параметр
Т
,
const T
,
T&
немесе
const
T&
түрінде жазылуы мүмкін, мұндағы
Т
–
аластаманың типі);
■
catch
параметрінде көрсетілген типтің туынды типі болған жағдайда
(егер мұралау
public
қол жеткізу кілтімен жүзеге асырылса);
■
нұсқауыштарды түрлендірудің стандартты ережелері бойынша
catch
параметріндегі нұсқауыш типіне түрлендірілуі мүмкін нұсқауыш бо-
лып табылған кездерде өңдеуіш табылған болып саналады.
Аталған ережелерге сəйкес, туынды кластардың өңдеуіштерін базалық
класс өңдеуіштерінен бұрын орналастыру керек, өйткені бұған кері жағдайда
басқару оларға еш уақытта берілмейді.
void
типті нұсқауыштың өңдеуіші кез
келген басқа типтің нұсқауышын автоматты түрде жасырады, сондықтан оны
да нақты тип нұсқауыштарының өңдеуіштерінен кейін орналастыру қажет.
Мысал қарастырайық.
#include
class Hello{
// Өзінің құрылғаны жəне жойылғаны туралы
// хабарлайтын класс
public:
Hello(){cout << "Hello!" << endl;}
~Hello(){cout << "Bye!" << endl;}
};
void f1(){
// Файл ашамыз
ifstream ifs("\\INVALID\\FILE\\NAME");
if (!ifs){
244
cout << "Аластама генерациялаймыз" << endl;
throw "Файл ашуда қате кетті";}
}
void f2(){
Hello H; // Жергілікті объект құрамыз
f1(); // Аластама генерациялайтын
Достарыңызбен бөлісу: |