1-Дәріс. Объектіге бағытталған бағдарламалаудың технологиясы


Өңдеудің жалпы механизмі және ерекшеліктер синтаксисі



бет33/43
Дата07.01.2022
өлшемі357,5 Kb.
#19368
1   ...   29   30   31   32   33   34   35   36   ...   43
Байланысты:
дәрістер жинағы

Өңдеудің жалпы механизмі және ерекшеліктер синтаксисі.

Ерекше жағдайды өңдеу үш шешу сөз арқылы жүзеге асырылады: try, catch және throw .

Қате туындай алатын, бағдарламалық кодтың фрагменті, байқап көру деп аударылатын try-қызметші сөзі алдында жазылған, құрама оператор болып табылатын, бақыланатын блокқа кіру керек .

Егер қате try блогында бар болса, онда ол қоздырылынып (throw),содан кейін ұсталынып (catch) және өңделінеді.

Блок try-дан шақырылатын функцияларда, ерекше жағдайды туғыза алады. Кез келген ерекше жағдай, catch нұсқасымен ұстап алынуы керек,ал ол, ерекшше жағдайды қоздыратын try блогынан кейін орналасу керек. try блогымен catch нұсқасының бірнешеуі байланыста бола алады. Онда қандай catch нұсқасы қолданылатыны ерекше жағдайдыңбайланысты. Қалған try блогының нұсқалары ескерілмейді. Бағдарламаның құратын кластары типтермен бірге кез келген типтерді ұстап алуға болады. Негізінен ерекше жағдайлар ретінде, жиі түрде класс типтері қолданылады.

throw нұсқасының негізгі формасы: throw ерекше_жағдай;

Нұсқа throw try блогының ішінде, немесе осы блок шақыратын (тура немесе жанама) кез келген функцияның ішінде орындалуы керек. Бұнда ерекше жағдай – бұл нұсқамен қоздырылатын throw ерекше жағдайы.

Егер сәйкес catch нұсқасы үшін жоқ ерекше жағдайы қондырылса , онда бағдарламаның қалыпты емес аяқталуы болуы мүмкін. Standart C ++ стандартына сәйкес өңделмейтін ереше жағдайдың қондырылуы terminate ( ) стандартты библиотекалық функцияның шақырылуына алып келеді. Үнсіздік бойынша бағдарламаны аяқтау үшін terminate функциясы abort ( ) функциясын шақырады.

Ерекше жағдайды өңдеудің жай мысалы:
#include

int main(void)

{ cout «″ басы \n″;

try{ // try блогының басы

cout «″ try блогының ішінде \n″;

throw 10 // қатені қоздыру

cout «″ Бұл нұсқа орындалмайды! cout″;

} catch (int i) //қатені ұстап алу

cout «″ қате номері қамтылған : «″ i cout « endl;

}

cout «″ соңы ″;



return 0;

}

catch нұсқасын орындағанан кейін, бағдарламаны басқару одан кейінгі келесі нұсқаға беріледі.Бұған қарамастан, әдетте catch блогы exit ( ), abort( ) немесе қандай да бір функцияны шақырумен бағдарламаны мәжбүр етіп аяқтайды.



Ерекше жағдай, try блогына кірмейтін нұсқамен де қоздырылуы мүмкін, егер осы нұсқа try блогынан шақырылатын функцияға кірсе.

try блогын функцияның ішінде орналастыруғаболады. Мұндай жағдайда, функцияға әрбір енген сайын ерекше жағдай өңдеушісі қайта орнатылады.

Кейбір жағдайларда жүйені барлық ерекше жағдайлардың типіне тәуелсіз, ұстап алатындай етіп баптау керек. Мұны өте оңай істеуге болады.Ол үшін catch нұсқасының келесі формасын қолданыңыз:

сatch ( …) { //барлық ерекше жағдайларды өңдеу }

Мұндағы көпнүкте мәндердің кез келген типіне сәйкес келеді.

try блогынан шақырылатын функция үшін, ерекше жағдай типтерінің санын шектеуге болады, оны осындай функция қоздыра алады. Нақтысында функцияға қандай қандай да бір ерекше жағдайды қоздыруға тыйым салуға болады.Ол үшін функцияның анықтамасына throw кілттік сөзін қосу керек:

Нәтиже_типі функция _аты (аргументтер_тізімі) throw (типтер_ тізімі) {…}

Мұнда типтер тізімі өрісінде, функция қоздыра алатын, ерекше жағдайлардың мәндер типтері үтірмен бөлініп келтірілген. Басқа типті ерекше жағдайды қоздыруды байқап көргенде, бағдарламаның авариялық түрде аяқталуына алып келеді. Қоздыратын ерекше жағдайлар типтерін шекте, функцияның try блогынан шақырғаннан кейін мүмкін болатындығын түсіну керек. Яғни, функция ішінде try блогы ерекше жағдайдың кез келген типін қоздыра алады, себебі ол осы функция ішінде ұсталынады.

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

Бір типті ерекше жағдайды қайта өңдеу мысалы:

#include

void Exception ( )

{ try { // char * типті ерекше жағдайды қоздыру

throw ″ сәлем ″;

}

// char* типті ерекше жағдайды ұстап алу



catch (char*)

{ cout « ″Exception ( ) функциясының ішіндегі char*ұстап алу \n″;

throw; // char* типті ерекше жағдайды қайта өңдеу, бірақ енді Exception ( ) функциясының ішінде емес.

}

}



int main(void)

{ cout «″ Басы \n″;

try{ Exception ( );

catch (char*){ cout « ″соңы main ( ) функциясының ішіндегі char*ұстап алу\n″;}

cout «″ Соңы ″;

return 0;

}

Бағдарлама экранға мынаны шығарады.



Басы

Exception ( ) функциясының ішіндегі char*ды ұстап алу

main ( ) функциясының ішіндегі char*ды ұстап алу

Соңы.


New операторының қазіргі уақыттағы спецификациясына сәйкес, ол жадыдағы орын бөлу сәтсіз болған кезде ерекше жағдайды қоздырады. Жадыдан осындай сұраныс үшін, new операциясынан басқа стандартты құрылғылар, операция-функциялар operator new ( ) және operator new[ ] көмегімен енгізілетін қайта жүктелген операциялар болып табылады. Үнсіздік бойынша, егер new операциясы жадыдан қажет бөлігін бөле алмаса, онда ол нулдік мәнді (NULL) қайтарады және қабаттас xalloc типті ерекшелікті құрады. xalloc типі - бұл except.h тақырыптық файылында анықталған класс.



Достарыңызбен бөлісу:
1   ...   29   30   31   32   33   34   35   36   ...   43




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет