Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК2.doc
Скачиваний:
158
Добавлен:
13.03.2015
Размер:
2.63 Mб
Скачать

Ерекше жағдайдың өңдеуішті анықтау

Программа ерекше жағдайларды генерациялаған кезде, С++ ерекше жағдайлардың өңдеуішті (функция) іске қосады, оның операторларын ерекше жағдайлар класында анықталып қойылған еді. Мысалы келесі ерекше жағдайдын nuke_meltdown классы nuke_meltdown функциясына ерекше жағдайдың өңдеуіш операторларды анықтайды:

class nuke_meltdown {

public:    nuke_meltdown(void) { cerr << "\а\а\а Жұмыс істеймін! Жұмыс істеймін! Жұмыс істеймін! " << endl; } };

Арада айтылмыш уақиғада, программа nuke_meltdown ерекше жағдайды генерациялаған кезде, try оператордан кейін бірінші операторға басқаруды қайтарып берудін орына, алдымен программа nuke_meltdown функциянын операторларын іске қосады. Келесі MELTDOWN.CPP программа nuke_meltdown функцияны қолдануын көрсетеді. Бұл программа try операторды ерекше жағдайды табуға рұқсат үшін қолданады. Ары қарай add_u232 функцияны amount параметрмен шақырады. Егер осы параметрдің мәні 255 кіші болса, онда функция nuke_meltdown ерекше жағдайды генерациялайды:

#include <iostream.h>

class nuke_meltdown

{ public:    nuke_meltdown(void) { cerr << "\а\а\а Жұмыс істеймін! Жұмыс істеймін! Жұмыс істеймін!" << endl; } };

void add_u232(int amount)

{    if (amount < 255) cout << "Параметр add_и232 в порядке" << endl;    else throw nuke_meltdown(); }

void main(void)

{    try

   {       add_u232(255);    }    catch (nuke_meltdown)

   {       cerr << "Программа түрақты" << endl;    } }

Егер осы программаны компиляциядан өткізіп және іске атқарса, онда экранның дисплейінде келесі шығыс пайда болады:

С:\> MELTDOWN <ENTER>

Жұмыс істеймін! Жұмыс істеймін! Жұмыс істеймін!

Программа тұрақты

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

Ерекше жағдайдың өңдеуішті аңықтау

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

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

Ерекше жағдайдың мәліметтердің элементерің қолдану

Алдыңғы сatch оператор туралы мысалдарда, программалар қандай ерекше жағдайлар орнын алғанын анықтайды да және оған сәйкесті іс әрекет орындайды. Неғұрлым ерекше жағдайлар туралы ақпарат болса, соғұрлым программалар қатеге дұрыс жауабын береді. Мысалы, file_open_error ерекше жағдайда қатені шақыратын файлдың атын білу қажет. Сол сияқты, file_read_error немесе file_write_error файлдық ерекше жағдайлар үшін программа байттын орнын білу қажет. Осындай ерекше жағдай туралы ақпаратты сақтау үшін программа ерекше жағдайдың классына мәліметтердің элементерін қосады. Егер программа ерекше жағдайларды генерациялса, ол бұл ақапартты ерекше жағдайдың функциясына параметр ретінде аударады, төменде келтірілген мысалдан көруге болады:

throw file_open_error(source); throw file_read_error(344);

Ерекше жағдайлар өңдеуіште осы параметрлер класстын айнымалындарына сәйкесті меншіктелінеді (конструкторға ұқсайды). Класстын айнымалына сәйкесті қатені шақырған файлдың атын меншіктеу үшін келесі операторлар file_open_error ерекше жағдайларды өзгертеді:

class file_open_error

{ public:    file_open_error(char *filename) { strcpy(file_open_error::filename, filename); }    char filename[255] ; };