Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Төтенше жағдайдың синтаксисі






Try кілттік сө зі мә нді генерациялайтын бақ ыланатын блок болып табылатын кодты анық тау ү шін қ олданылады. Блок фигуралық жақ шағ а алынып жазылады: try{…} try блогынан шақ ырылатын тура жә не ауыспалы барлық функциялар сондай ақ оғ ан бағ ынышты болып есептеледі. Генерация жағ дайы параметрмен немесе параметрсіз қ олданылатын throw кілттік сө зінен throw[ө рнек] throw сө зінен кейін тұ ратын ө рнектің типі жағ дайдың туындалатын типін анық тайды. Ағ ымдағ ы блокты орындау жағ дайы генерациясы кезінде қ атысып тұ рғ ан ө ң деушіні іздеу жә не оғ ан бағ ыт беретін жіберу орындалады. Ереже бойынша жағ дай try блогында генерацияланады, ал функцияда тура жә не ауыспалы болады. Ішкі блокта пайда болатын жағ дай ә р уақ ытта тез ө ң деле бермеуі мү мкін. Бұ л жағ дайда бақ ыланғ ан блогтар қ олданылады жә не парметрсіз throw кілттік сө зінің кө мегімен жоғ ары дең гейге дейін беріледі. Ө ң делетін жағ дайдың типі жақ шада жазылатын, catch кілттік сө зінен басталады. Олар true блогынан тә уелсіз орналасуы керек. Ө ң делетін жағ дайдың типтерінің қ атысуымен бір немесе бірнеше ө ң деушілерді жазуғ а болады. Ө ң деушілердің синтаксисі бір параметрмен анық талатын функцияны еске тү сіреді – жағ дай типі. Жазбаның ү ш формасы бар.

Catch (тип аты){.../* ө ң деуші денесі*/}

catch (тип) {… /* ө ң деуші денесі * /}

Catch (..) {… /* ө ң деуші денесі*/}

Бірінші форма қ андай да бір ә рекеттерді орындауғ а арналғ ан ө ң деуші денесінде параметр аты қ олданылғ анда ауыстырылады – мысалы жағ дай информацияны шығ арғ анда. Екінші форма жағ дай туралы ақ паратты қ олдануды болжай алмайды, оның типі ғ ана маң ызды роль атқ арады. Параметрдің орнына қ олданғ ан кезде ө ң деуші барлық жағ дайда алып жү реді деген мағ ынаны анық тайды. Ө ң деушілер жазылғ ан реті бойынша қ арастырылады, ал ү ш типтегі ө ң деуші қ алғ андарынан кейін орналастырылады. Мысалы:

Catch (int I){

…// жағ дайды ө ң деу типі int

}

Catch (const char *) {

…// жағ дайды ө ң деу типі const char*

}

Catch (Overflow){

…// жағ дайды ө ң деу классы Overfow

}

Catch (…){

 

…// Барлық жағ дайлардың қ ызмет етпеуі

}

Жағ дайды ө ң дегеннен кейін бағ ыт жағ дайдың ө ң деушісінде табылатын бірінші операторғ а беріледі. Егер жағ дай try блогында генерацияланбаса.

Ерекше жағ дайларды ұ стап қ алу

Throw кө мегімен генерацияланғ анда функция С++ кітапханасы орындаушысын да келесі ә рекеттерді орындайды.

1. Жағ дай ө ң делмейінше статикалық обьект тү рінде тұ ратын throw параметрі кө шірмесінен қ ұ рылады;

2. Сә йкес келетін ө ң деушіні іздестіру кезінде локальді образдардың деструкторларын шақ ыры ө тіп, ә рекет облыстарынан шығ ып стекке айналдырады.

3. Ө ң деушілерге осы обьектімен типі бойынша сә йкес келетін параметрге ие обьекті мен бағ ытты береді.

Стекті айналдыру кезінде барлық ө ң деушілер ә рбір ішкі блоктан сыртқ ығ а ө ң деушіге сә йкес келетін дең гейді таппайынша қ арайды.

Ө ң деуші ізделінді деп аталады, егер обьект типі throw сө зінен кейін орналасса:

· Catch параметріне сілтенген (параметр t, const T& формасында жазылуы мү мкін, мұ ндағ ы T – жағ дайдың типі

· Catch параметрінде кө рсетілген туынды болып табылады (егер мұ рагерлік public кілттік сө зімен рұ қ сат етілсе)

· Catch параметріндегі кө рсеткіштің стандартты ө згерту ережесі бойынша ө згеруі мү мкін кө рсеткіш болып табылады. Класстың туынды ө ндірушілері базаның ө ндірушілеріне дейін орналастырады, кері жағ дайда оларғ а ешқ андай бағ ыт берілмейді. Void типті кө рсеткіштің ө ндірушісі автоматты тү рде басқ а типті кө рсеткіштерді жасырады, сондық тан оларды нақ ты типті кө рсеткіштердің ө ндірушілеріне дейін орналастыруғ а болады.

Мысал қ арастырайық:

#include< fstream.h>

Class Hello{

// Ө зінің қ ұ рылуы мен жоюлуында ақ парат бертін класс

Public:

Hello () { cout < < ”Hello! ”< < endl: }

~Hello () {cout < < ”Bye! ”< < endl: }

}:

Void f1(){

Ifstream ifs(“\\INVALID\\FILE\\NAME”): // ФАЙЛДЫ АШУ

If (! ifs){

Cout< < ”жағ дайды генерациялау”< < endl;

Throw “файлды ашуда қ ате”: }

}

Void f2{

Hello H: // локальды обьектіні қ ұ рамыз”: }

F1(): Функцияны шақ ырамыз. Жағ дайды генерациялау

}

Int main(){

Try{

Cout< < ”try блокка кіреміз”< < endl:

F2():

Cout< < ”try блоктан шығ амыз< < endl:

}

Catch (int i){

cout< < ”int қ айта жө ндеуді шақ ыру жағ дайы – “< < i< < endl:

return -1;

}

Return 0; Бә рі сә тті аяқ талды

}

Программаның нә тижесі:

Try блокка кіру

Hello!

Жағ дайды генерациялау

Bye!

Қ айта жө ндеуді шақ ыру const char *. Жағ дай – Файлды ашуда қ ате. Назар аударың ыз, жағ дай туындағ аннан кейін локальды обьектінің деструкторы шақ ырылғ ан болады я болмаса f1 функциясынан шақ ырылғ ан бағ ыт main функциядағ ы ө ң деуге жіберілген болатын. Try – блоктан шығ атын хабарлама толық шығ арылмайды. Программада файлдармен жұ мыс жасайтын топтар қ олданылады. Механизм жағ дайы қ ателік сетуациялардан шық қ ан кездегі обьектілерді жоюғ а мү мкіндік береді.Сондық тан ресурстың белгілеуі жә не жіберуі-класс тү рінде безендіруге қ олайлы, мұ нда конструктор ресурсты белгілейді, ал деструктор жібереді.Мұ нда мысал ретінде файлдарман жұ мыс істейтін классты қ арастыуғ а болады.Класстың конструкторы файлды ашады, ал деструктор жабады.Бұ л жағ дайда қ ате шық қ ан кезде файл жабылады жә не ондағ ы ақ паат жойылады деген кепілдік бар.Ескертіліп кететіндей жағ дай қ олданушының типіне оны қ олданғ андағ ы тә різді стандартты тү рде де болуы мү мкін, сондық тан оның типін анық таудың қ ә жеті жоқ, мұ нда жағ дайдың туылғ ан нү ктесіне жә не оның ө ң делетін нү ктесіне танымал болуы ү шін глобальды типті таң даса жеткілікті.

 

Бақ ылау сұ рақ тары:

1. Тө тенше жағ дай дегеніміз не?

2. Қ ателерді ө ң деу қ алай жү ргізіледі?

3. Тө тенше жағ дайлар синтаксисі қ андай?

Ә дебиеттер:

1. Павловская Т.А. С и С++. Программирование на языке высокого уровня.

2. Р. Лафоре. Объектно-ориентированное программирование в С++.4-е издание. Питер.2004

3. Подбельский В.В., Фомин С.С. Программирование на языке Си: Учебное пособие. – М.: Финансы и статистика, 2004

4. Гради Буч. Объектно - ориентированный анализ и проектирование с примерами приложений на С++. - М.: Изд. Бином, Невский Диалект, 1998.

5. А.В. Замулин. Курс лекций: ООП (С++, Ява, C#)

 

 

 

 



Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал